Help us understand the problem. What is going on with this article?

Symfony4.4から導入されたNotificationEmailが気になったのでさわってみた

More than 1 year has passed since last update.

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メールが送信されます。

IMG_1333.PNG

良い感じでMarkdownを解析したメールを受け取ることができます。上記の実装サンプルに追加でリストや引用もつけてみましたが、ちゃんと解析されて表示されます。

すっきりとしたレイアウトでテンプレートも不要。Markdownでそれなりに体裁を整えたメールが送信できるので、サイト管理者などに送る通知メールには向いているかなと思いました。現場からは以上です。

ippey_s
大阪・枚方のフリーランスWebデベロッパー。主にSymfonyやLaravelなどのPHPフレームワークを使った開発やCraftCMSやWordPressなどのCMSを使ったサイト制作をしています。
https://unplat.info
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away