Using MJML Email Templates with CakePHP

This guide walks through a quick setup for using MJML Email templates in a CakePHP project.

Install MJML

Start by installing MJML using npm.

npm install mjml

Now you can start creating your .mjml files in the resources folder. Run the following command to convert them to an HTML file you can view with your browser.

npx mjml -w resources/template.mjml -o resources/template.html

Create a CakPHP command to turn your mjml files into PHP templates.

From the code below you can see it looks for html files, processes some special tags, and puts the templates in the email folder.
There are two special tags to be aware of. The php echo tags should be wrapped in [[]] and the regular php tags should use the mj-raw tag.

namespace App\Command;

use Cake\Command\Command;
use Cake\Console\Arguments;
use Cake\Console\ConsoleIo;

class EmailGenCommand extends Command
{

public function execute(Arguments $args, ConsoleIo $io): int
{
    $io->out('Processing email templates');
    $files = glob(APP.'../resources/*.html');
    foreach ($files as $file) {
        $content = file_get_contents($file);
        $content = str_replace(['[[',']]','<mj-raw>','</mj-raw>'], ['<?=','?>','',''], $content);
        $file = str_replace('.html', '.php', $file);
        $file = str_replace(APP.'../resources/', APP.'../templates/email/html/', $file);
        file_put_contents($file, $content);
    }
	return static::CODE_SUCCESS;
}

}

Comments or questions?

Please contact us! We are excited to hear from you.