Skip to main content

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 プロパティに設定したデータは、自動的にテンプレートで利用できます。
対応するBladeテンプレート (resources/views/mail/orders/shipped.blade.php) を作成します。
データを with パラメーターで明示的に渡すこともできます。この場合はプロパティを protected または private にします。

メールの送信

Mail ファサードの to() メソッドで宛先を指定し、send() でメールを送信します。
CC・BCCも指定できます。
特定のメーラーを使って送信するには mailer() メソッドを使います。

キューを使ったメール送信

メール送信はレスポンスタイムに影響するため、キューを使ってバックグラウンドで送信することを推奨します。
キューを使うには、事前にキューの設定とワーカーの起動が必要です。
遅延送信も可能です。
Mailableクラスに ShouldQueue を実装すると、send() を呼び出しても常にキューに入るようになります。

キュー接続とキュー名をPHP属性で指定する

PHP 属性を使ってMailableクラスにキュー接続とキュー名を直接指定できます。on()->queue() メソッドチェーンの代わりに、クラスレベルで宣言的に設定できます。
この方法では、このMailableが常にSQS接続の emails キューに送信されることをクラス定義で明示できます。

Markdown Mailの作成

Markdown形式のメールを使うと、Laravelが提供する美しいレスポンシブなHTMLテンプレートを活用できます。

Markdown Mailableの生成

--markdown オプションを付けてMailableを生成します。
content() メソッドで markdown パラメーターを使います。

Markdownテンプレートの記述

Laravelが提供するBladeコンポーネントを使ってメール本文を作成します。
利用可能なコンポーネントは次のとおりです。
Markdownメールは、同時にプレーンテキスト版も自動生成されます。HTMLメールに対応していないメールクライアントでも読めます。

メールのプレビュー

ルートでMailableインスタンスを返すと、ブラウザでメールをプレビューできます。開発中の確認に便利です。

ローカル開発でのメール

本番環境でメールを誤送信しないよう、ローカル開発では Mailpit などのツールを使うと便利です。
LaragonLaravel Herd では Mailpit がデフォルトで含まれています。
log ドライバーを使うとメールの内容がログファイルに記録されます。メール送信の確認だけであれば最も手軽な方法です。

まとめ

最終更新日 2026年6月21日