Laravelのメール機能とは
Laravelのメール機能は Symfony Mailer をベースに構築されており、SMTP・Mailgun・Postmark・Resend・Amazon SES・sendmailなどのドライバーに対応しています。以前のLaravelで使われていたSwiftMailerは廃止されています。Laravel 9以降はSymfony Mailerを使います。
config/mail.php で管理します。.env ファイルで使用するドライバーを切り替えることができます。
Mailableクラスの作成
Laravelでは、アプリケーションが送信する各メールを「Mailable」クラスとして表現します。make:mail Artisanコマンドでクラスを生成します。
app/Mail/ ディレクトリに配置されます。
Mailableの設定
生成されたMailableクラスにはenvelope()、content()、attachments() の3つのメソッドがあります。
送信者の設定
envelope() メソッドで送信者を指定できます。
config/mail.php にグローバルな送信者アドレスを設定しておくと、個別のMailableでの指定を省略できます。
メール本文の設定
content() メソッドでBladeテンプレートを指定します。コンストラクターで public プロパティに設定したデータは、自動的にテンプレートで利用できます。
resources/views/mail/orders/shipped.blade.php) を作成します。
with パラメーターで明示的に渡すこともできます。この場合はプロパティを protected または private にします。
メールの送信
Mail ファサードの to() メソッドで宛先を指定し、send() でメールを送信します。
mailer() メソッドを使います。
キューを使ったメール送信
メール送信はレスポンスタイムに影響するため、キューを使ってバックグラウンドで送信することを推奨します。ShouldQueue を実装すると、send() を呼び出しても常にキューに入るようになります。
キュー接続とキュー名をPHP属性で指定する
PHP 属性を使ってMailableクラスにキュー接続とキュー名を直接指定できます。on()->queue() メソッドチェーンの代わりに、クラスレベルで宣言的に設定できます。
emails キューに送信されることをクラス定義で明示できます。
Markdown Mailの作成
Markdown形式のメールを使うと、Laravelが提供する美しいレスポンシブなHTMLテンプレートを活用できます。Markdown Mailableの生成
--markdown オプションを付けてMailableを生成します。
content() メソッドで markdown パラメーターを使います。
Markdownテンプレートの記述
Laravelが提供するBladeコンポーネントを使ってメール本文を作成します。メールのプレビュー
ルートでMailableインスタンスを返すと、ブラウザでメールをプレビューできます。開発中の確認に便利です。ローカル開発でのメール
本番環境でメールを誤送信しないよう、ローカル開発では Mailpit などのツールを使うと便利です。Laragon や Laravel Herd では Mailpit がデフォルトで含まれています。
log ドライバーを使うとメールの内容がログファイルに記録されます。メール送信の確認だけであれば最も手軽な方法です。