#20 Laravel基礎
Mailableでメールを送信する
メール送信の準備
Laravelでは Mailable? メール送信の内容とロジックをクラスにまとめる仕組み。`php artisan make:mail`で生成し、`Mail::to()->send()`で送信する。 クラスにメールの内容とロジックをまとめて送信できます。
まず .env でメールの設定を確認します。開発中は Mailtrap(受信テスト用サービス)が便利です。
# 📁 .env(開発環境)
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_mailtrap_username
MAIL_PASSWORD=your_mailtrap_password
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"
Mailable クラスを生成する
php artisan make:mail WelcomeMail
app/Mail/WelcomeMail.php が生成されます。
<?php
// 📁 app/Mail/WelcomeMail.php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
// コンストラクターでデータを受け取る
public function __construct(
public User $user // ← public にするとビューから自動でアクセスできる
) {}
// メールの件名・送信元などを設定
public function envelope(): Envelope
{
return new Envelope(
subject: 'ご登録ありがとうございます',
);
}
// メール本文のビューを指定
public function content(): Content
{
return new Content(
view: 'emails.welcome', // ← resources/views/emails/welcome.blade.php
);
}
}
メール本文のビューを作る
mkdir -p resources/views/emails
{{-- 📁 resources/views/emails/welcome.blade.php --}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>{{ $user->name }} さん、ご登録ありがとうございます!</h1>
<p>アカウントが正常に作成されました。</p>
<p>
<a href="{{ route('dashboard') }}">ダッシュボードへ</a>
</p>
<p>
ご不明な点がございましたら、<a href="mailto:support@example.com">サポート</a>までご連絡ください。
</p>
</body>
</html>
メールを送信する
// 📁 app/Http/Controllers/Auth/RegisteredUserController.php
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
public function store(Request $request)
{
// ユーザー登録処理
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
// ウェルカムメールを送信
Mail::to($user->email)->send(new WelcomeMail($user));
return redirect()->route('dashboard');
}
CC・BCC・複数宛先
Mail::to($user)
->cc($manager)
->bcc('log@example.com')
->send(new WelcomeMail($user));
// 複数宛先
Mail::to([$user1, $user2])->send(new WelcomeMail($user1));
添付ファイル
// 📁 app/Mail/InvoiceMail.php
use Illuminate\Mail\Mailables\Attachment;
public function attachments(): array
{
return [
Attachment::fromPath(storage_path('app/invoices/invoice-001.pdf'))
->as('請求書.pdf')
->withMime('application/pdf'),
];
}
ローカルでのメールテスト(log ドライバー)
本番のメールサーバーを使わず、ログファイルにメール内容を書き出す方法です。
# 📁 .env
MAIL_MAILER=log
storage/logs/laravel.log にメールの内容が出力されます。
まとめ
php artisan make:mailで Mailable クラスを生成するenvelope()で件名、content()でビューを指定する- コンストラクターの
publicプロパティはビューから$userのようにアクセスできる Mail::to()->send()でメールを送信する- 開発中は
MAIL_MAILER=logでログ出力できる
次回はキューを使ってメール送信を非同期化する方法を学びます。