Symfony Component Advent Calendar 2022の11日目の記事です。
最初に
SymfonyはPHPのフレームワークのひとつです。しかし、公式サイトの説明文には
Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)
と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、Symfony上だけで動作するのではなく、他のPHPフレームワークやアプリケーションでも動作している強力なものが揃っています。
今回はそれらの中から、役立ちそうなもの・お薦めしたいものを紹介していきたいと思います。
※記事内ではautoloadのインポートは省略します。
サクッとメールを送る、"Mailer"
Mailerは、メールを送るコンポーネントです。以前はSwiftMailerというのを利用していましたが、5.3からはこのMailerが使われるようになりました。Symfony以外でも動作しますし、Laravelのメール送信機能もこのMailerを使っています。
インストール
composer require symfony/mailer
DSNの設定
Mailerを使う際、DSNを設定する必要があります。Mailerインストール時にmailer.yaml
が以下のように作成されます。
framework:
mailer:
dsn: '%env(MAILER_DSN)%'
よって、.env
のMAILER_DSN
に利用したいDSNを設定します。
# SMTPの場合
MAILER_DSN=smtp://{ユーザ名}:{パスワード}@{SMTPホスト}:{ポート}
# sendmailの場合
MAILER_DSN=sendmail://default
# php.ini準拠の場合
MAILER_DSN=native://default
他にもいくつかDSNが用意されていますが、それぞれ追加のコンポーネントをインストールする必要があります。
メールの送信
メールの送信はいたって簡単で、Email
オブジェクトを作り、各プロパティの設定を行った後で、Mailer
オブジェクトで送信します。
public function create(MailerInterface $mailer): Response
{
$email = new Email();
$email
->from('Fromのメールアドレス')
->to('Toのメールアドレス')
->text('メール文言')
->html('HTMLメール文言')
->attachFromPath('ファイルパス', 'ファイル名', 'MIMEタイプ') // 添付ファイル
;
$mailer->send($email);
}
Twigの利用
Twigを利用している場合、TemplateEmail
クラスを使うことで、テキスト・HTMLメール文言のテンプレートからメール文言を作成することができます。
$email = new TemplateEmail();
$email
->htmlTemplate('email/registered.html.twig') // HTMLメール文言
->textTemplate('email/registered.txt.twig') // テキストメール文言
;
まとめ
今回はMailerを紹介しました。メール送信機能なので、他のライブラリと大きく違うところはないですが、Symfonyでは必要な箇所にサクッと注入できて便利です。他にもマニアックな機能があったりするので、ぜひ公式ドキュメントをご覧ください。