This module is based on: MJML The only open-source framework that makes responsive-email easy https://mjml.io
With this module you can define your email templates as MJML files and render them using Zend ViewModel
.
The MJML markup will be sent to https://mjml.io/try-it-live in order to be transformed to HTML.
The package supports:
- simple variable replacement after the markup has been converted. (
*.mjml
files) - complex templating system using PHP inside the mjml markup. (
*.pmjml
files)
You can send the complete emails using a pre-defined email transport method.
- PHP Version >= 5.4
- Zend Framework 2 (2.*)
- Guzzle Http Client (~5)
- Guzzle Cache Subscriber (*)
-
Add
"kachar/zend-mjml": "dev-master"
to yourcomposer.json
file and runphp composer.phar update
."require": { "kachar/zend-mjml": "dev-master" }
$ php composer.phar update
-
Add
ZendMjml
to yourconfig/application.config.php
file under themodules
key.'modules' => [ 'ZendMjml', ],
Under the key mjml
you can set the following options in the configuration:
mjmlServiceUrl
:
Sets the MJML endpoint (default https://mjml.io
)
timeout
:
Float describing the timeout of the request in seconds. Use 0 to wait indefinitely (default value 10
).
connectTimeout
:
Float describing the number of seconds to wait while trying to connect to a server. Use 0 to wait indefinitely (default value 1.5
).
transportAdapter
:
The adapter that will be used to send the actual email. Two possible configurations:
- as a string - Any service that implements
Zend\Mail\Transport\TransportInterface
and can be fetched from ServiceLocator.
'mjml' => [
'transportAdapter' => [
'type' => 'sendmail',
'options' => [
// see http://www.sendmail.org/~ca/email/man/sendmail.html
],
],
],
- as factory array - Configuration options based on
\Zend\Mail\Transport\Factory
. For advanced factory options you can see (official documentation)[http://framework.zend.com/manual/current/en/modules/zend.mail.transport.html#zend-mail-transport].
'mjml' => [
'transportAdapter' => 'Zend\Mail\Transport\Sendmail',
],
'service_manager' => [
'invokables' => [
'Zend\Mail\Transport\Sendmail' => 'Zend\Mail\Transport\Sendmail',
],
],
$service = $this->getServiceLocator()->get('Service\Mjml');
$mjml = '
<mj-body>
<mj-section>
<mj-column>
<mj-image width="100" src="https://mjml.io/assets/img/logo-small.png"></mj-image>
<mj-divider border-color="#F45E43"></mj-divider>
<mj-text font-size="20px" color="#F45E43" font-family="helvetica">Hello {{ name }}</mj-text>
</mj-column>
</mj-section>
</mj-body>
';
// This is the final html to be sent to the recipients
$body = $service->renderMjml($mjml);
// You can replace simple variables inside the final output
$body = $service->renderMjml($mjml, [
'name' => 'direct example',
]);
// Sending the email
$email = $service->composeEmail($body);
$email->setTo('email@example.com');
$email->setSubject('Sample responsive MJML email');
$service->sendEmail($email);
// or
echo $body;
$service = $this->getServiceLocator()->get('Service\Mjml');
$view = new ViewModel();
$view->name = 'John Doe';
$view->setTemplate('mjml/plain.mjml');
// This is the final html to be sent to the recipients
$body = $service->renderView($view);
// Sending the email
$email = $service->composeEmail($body);
$email->setTo('email@example.com');
$email->setSubject('Sample responsive MJML email using ViewModel');
$service->sendEmail($email);
$view = new ViewModel();
// This will be replaced using str_replace in the final template
$view->name = 'PHP MJML Template';
// This will be replaced using php in the initial mjml template
$view->products = [
[
'name' => 'Ham',
'price' => '1.50',
'quantity' => 5,
],
[
'name' => 'Cheese',
'price' => '3.75',
'quantity' => 3,
],
[
'name' => 'Bread',
'price' => '5.00',
'quantity' => 10,
],
];
$view->setTemplate('mjml/php-mjml.pmjml');
// This is the final html to be sent to the recipients
$body = $service->renderView($view);
// Sending the email
$email = $service->composeEmail($body);
$email->setTo('email@example.com');
$email->setSubject('Sample responsive MJML email using PhpRenderer');
$service->sendEmail($email);