Symfony Advent Calendar 2019 20日目の記事です。
Symfony4.4から導入されたNotificationEmail。『NotificationなEmailとは🤔』となったので、実際に触ってみました。
NotificationEmailとは
NotificationEmailはSymfonyのメールデータ生成クラスのひとつです。TemplateEmailの子クラスで、基本的にはTemplateEmailクラスと同じ使い方です。TemplateMailと大きく違うところは、テンプレートファイルを指定しなくて良いことと、themeというプロパティができたこと、markdown()というメソッドが追加されていることです。
テンプレートファイルはデフォルト定義されており、vendor/symfony/twig-bridge/Resources/views/Email
に格納されています。左記ディレクトリのthemeで指定したディレクトリにテンプレートファイルが入っています。デフォルトのthemeはdefaultですが、defaultはzurb_2をインポートしており、Foundation for Emails 2を利用して、テンプレートが作成されています。Foundation for Emails2により、見た目よさげなメールが作成できます。
インストール
インストールは、composerを使ってインストールします。
composer require symfony/mailer
composer require twig/cssinliner-extra
composer require twig/inky-extra
composer require twig/markdown-extra
composer require erusev/parsedown
メールを送るだけならsymfony/mailerだけで十分ですが、インラインでのCSS修飾、Markdown記述&解析が必要なため複数コンポーネントをインストールする必要があります。
実装
$name = 'めもりー';
$message = <<< MSG_EOR
![Symfony Logo](https://symfony.com/images/logos/header-logo.svg)
# こんにちは!
こんにちは。${name} ちゃん。
こちらはテストメッセージです。
SymfonyにNotificationEmailという機能が追加されました!
[Symfonyって?](https://symfony.com/)
MSG_EOR;
$notificationEmail = new NotificationEmail();
$email = $notificationEmail->from('from@***.co.jp')
->to('to@***.co.jp')
->subject('テスト送信です')
->markdown($message)
->action('NotificationEmailについてもっと詳しく', 'https://symfony.com/blog/new-in-symfony-4-4-notification-emails')
->importance(NotificationEmail::IMPORTANCE_HIGH)
;
$this->mailer->send($email); // $this->mailerはDIコンテナでMailerInterfaceを刺してます。
NotificationEmailのそれぞれのメソッドですが、
メソッド | 説明 |
---|---|
from() | Fromアドレスを指定します。 |
to() | To アドレスを指定します。 |
subject() | 題名を指定します。 |
markdown() | Markdown形式の本文を指定します。独自メソッド |
action() | メール下部に指定した文言、リンクでボタンを配置します。独自メソッド |
importance() | メールの重要度を指定します。メール題名の前に[HIGH]というような文言が入ります。HIGH, MEDIUM, URGENT, LOWがあります。独自メソッド |
theme() | 指定したテーマに切り替えます。独自メソッド。使うことはないかな |
TemplateEmailの子クラスなので、そのほかのTemplateEmailのメソッドも使えますが、おそらく使うことはないでしょう。
実行
実行すると以下のようなHTMLメールが送信されます。
良い感じでMarkdownを解析したメールを受け取ることができます。上記の実装サンプルに追加でリストや引用もつけてみましたが、ちゃんと解析されて表示されます。
すっきりとしたレイアウトでテンプレートも不要。Markdownでそれなりに体裁を整えたメールが送信できるので、サイト管理者などに送る通知メールには向いているかなと思いました。現場からは以上です。