在 Web 應用開發中,發送郵件是一個常見的需求。然而,手動編寫 html 郵件既費時又容易出錯,而且不同郵件客戶端的兼容性問題也讓人頭疼。為了解決這個問題,我嘗試了 notfloran/mjml-bundle,這是一個 symfony 框架的擴展包,它集成了 MJML 郵件模板引擎,可以幫助開發者更高效地創建美觀、響應式的 HTML 郵件。 composer在線學習地址:學習地址
mjml (mailjet markup language) 是一種專門為郵件設計的標記語言,它通過簡潔的語法和組件化的方式,讓開發者能夠輕松構建出在各種設備和郵件客戶端上都能完美顯示的郵件模板。notfloran/mjml-bundle 則將 mjml 集成到了 symfony 框架中,使得在 symfony 項目中使用 mjml 變得非常簡單。
安裝與配置
使用 Composer 安裝 notfloran/mjml-bundle 非常簡單:
composer require notfloran/mjml-bundle
安裝完成后,如果你的 Symfony 項目使用了 flex,那么擴展包會自動完成配置。如果沒有使用 Flex,則需要在 config/bundles.php 文件中手動啟用該擴展包。
接下來,你需要安裝 MJML 編譯器。推薦使用 npm 安裝:
npm install mjml
然后,在 config/packages/mjml.yaml 文件中配置 MJML 編譯器的路徑和其他選項:
mjml: renderer: binary options: binary: '%kernel.project_dir%/node_modules/.bin/mjml' minify: true validation_level: skip
使用方法
notfloran/mjml-bundle 提供了兩種使用 MJML 的方式:
-
Twig 標簽: 在 Twig 模板中使用 {% mjml %} 和 {% endmjml %} 標簽包裹 MJML 代碼,擴展包會自動將其編譯為 HTML。
{# templates/mail/example.mjml.twig #} {% block email_content %} {% mjml %} <mjml> <mj-body> <mj-section> <mj-column> <mj-text font-size="20px" color="#F45E43" font-family="helvetica"> Hello {{ name }} from MJML and Symfony </mj-text> </mj-column> </mj-section> </mj-body> </mjml> {% endmjml %} {% endblock %}
在 Controller 中渲染該模板,即可得到編譯后的 HTML 代碼:
use SymfonyComponentMailerMailerInterface; use SymfonyComponentMimeEmail; public function sendEmail(MailerInterface $mailer) { $htmlBody = $this->renderView('templates/mail/example.mjml.twig', ['name' => 'Floran']); $email = (new Email()) ->from('my-app@example.fr') ->to('me@example.fr') ->subject('Hello from MJML!') ->html($htmlBody); $mailer->send($email); }
-
MJML 服務: 將 MJML 代碼放在獨立的 Twig 模板中,然后通過 NotFloranMjmlBundleRendererRendererInterface 服務來編譯 MJML 代碼。
{# templates/mail/example.mjml.twig #} <mjml> <mj-body> <mj-section> <mj-column> <mj-text font-size="20px" color="#F45E43" font-family="helvetica"> Hello {{ name }} from MJML and Symfony </mj-text> </mj-column> </mj-section> </mj-body> </mjml>
use NotFloranMjmlBundleRendererRendererInterface; use SymfonyComponentMailerMailerInterface; use SymfonyComponentMimeEmail; public function sendEmail(MailerInterface $mailer, RendererInterface $mjml) { $mjmlBody = $this->renderView('templates/mail/example.mjml.twig', ['name' => 'Floran']); $htmlBody = $mjml->render($mjmlBody); $email = (new Email()) ->from('my-app@example.fr') ->to('me@example.fr') ->subject('Hello from MJML!') ->html($htmlBody); $mailer->send($email); }
優勢與應用
使用 notfloran/mjml-bundle 的優勢在于:
- 高效的郵件開發: MJML 語法簡潔易懂,可以快速構建出復雜的郵件布局。
- 跨客戶端兼容性: MJML 編譯器會自動處理不同郵件客戶端的兼容性問題,保證郵件在各種設備上都能正常顯示。
- 響應式設計: MJML 支持響應式設計,可以輕松創建適應不同屏幕尺寸的郵件。
- 易于集成: notfloran/mjml-bundle 與 Symfony 框架無縫集成,使用起來非常方便。
在實際應用中,notfloran/mjml-bundle 可以用于:
總而言之,notfloran/mjml-bundle 是一款非常實用的 Symfony 擴展包,它可以幫助開發者更高效地創建美觀、兼容性強的 HTML 郵件,從而提升 Web 應用的用戶體驗。如果你正在使用 Symfony 框架,并且需要發送郵件,那么強烈推薦你嘗試一下 notfloran/mjml-bundle。