Laravelには、メール送信機能が標準で組み込まれており、簡潔で柔軟にメール送信処理を実装できます。この記事では、Mailableクラスの使い方や、Bladeテンプレートを使ったHTMLメールの実装方法、そして基本的な設定方法までをわかりやすく解説します。
メール送信機能の準備
まずは、メール送信に必要な設定を.env
ファイルに記述します。ここでは、Gmailを例にします。
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_gmail_address@gmail.com
MAIL_PASSWORD=your_gmail_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your_gmail_address@gmail.com
MAIL_FROM_NAME="Laravel App"
GmailのSMTPを使用する場合、アプリパスワードや2段階認証の設定も必要になることがあります。
Mailableクラスの作成
Laravelでは、Mailableクラスを使ってメールの構成を定義できます。以下のコマンドでMailableクラスを作成します。
php artisan make:mail ContactMail
作成されたapp/Mail/ContactMail.php
に、件名やビューを定義します。
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ContactMail extends Mailable
{
use Queueable, SerializesModels;
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
return $this->subject('お問い合わせ内容の確認')
->view('emails.contact');
}
}
メールテンプレートの作成
resources/views/emails/contact.blade.php
にテンプレートを作成します。
<h2>お問い合わせ内容</h2>
<p>お名前:{{ $data['name'] }}</p>
<p>メールアドレス:{{ $data['email'] }}</p>
<p>メッセージ:{{ $data['message'] }}</p>
メール送信処理の実装
コントローラやサービスクラスから以下のように呼び出して送信します。
use App\Mail\ContactMail;
use Illuminate\Support\Facades\Mail;
public function sendContact(Request $request)
{
$data = $request->only(['name', 'email', 'message']);
Mail::to('admin@example.com')->send(new ContactMail($data));
return redirect()->back()->with('status', 'メールを送信しました。');
}
Mail::to()
で宛先を指定し、send()
にMailableインスタンスを渡すだけで送信できます。
キューを使って非同期で送信する
メール送信に時間がかかる場合は、キューを使ってバックグラウンドで処理することも可能です。
Mail::to('admin@example.com')->queue(new ContactMail($data));
queue()
を使えば、キューを通じて非同期で処理され、ユーザーの待ち時間を軽減できます。
※ キューの設定が別途必要です。
HTMLとプレーンテキストを両方送信する
build()
メソッドでview()
とtext()
を併用することで、HTMLとテキストの両方に対応可能です。
public function build()
{
return $this->subject('お問い合わせ内容の確認')
->view('emails.contact')
->text('emails.contact_plain');
}
よくある注意点
- Gmailを使う場合は、アプリパスワードの設定が必要になる場合があります。
- 本番環境では必ず
MAIL_FROM_ADDRESS
とMAIL_FROM_NAME
を設定しましょう。 - HTMLメールを送る場合は、表示崩れに注意しシンプルな構成にするのがおすすめです。
まとめ
LaravelのMailableクラスとテンプレートを使えば、柔軟かつ見やすいメール送信処理が実装できます。送信先や内容が複雑でも、構造を分離できるため保守性が高くなります。
また、非同期送信やHTMLテンプレートの併用など、実務でもよく使われる機能を組み合わせることで、より快適なアプリケーションを構築できます。