とある Laravel リポジトリのローカル開発環境で何故かメールが送信できず、設定の確認のため env.local 見てみると、Mailtrap というサービスを利用している模様。
サービス上でダミーのSMTPサーバーが用意され、それを使ってメールを送信すると画面上で送信したメールの内容を確認出来るという感じ。初めて見聞きしたサービスのため、使い方を調査した結果をメモ。
(※調査後、メールは無事にテスト出来ました。こういうのは README.md に残してて欲しい…)
Mailtrap 公式サイト
アカウント作成
トップページ右上にある 「Sign Up」ボタンをクリック。
Google, GitHub, Office 365 アカウントのいずれか、もしくはEメールにてアカウントが作成可能です。
Eメールだとそのアドレスが利用可能かどうかの確認のためのメールが送信され、そのメールのリンクをクリックするという一手間が発生しますので、可能であれば Google, GitHub, Office365 アカウントでの利用をオススメします。(大した手間ではないですけど…)
ダミー SMTP サーバー情報を取得する
ログイン後、左メニューにある Email Testing リンクをクリック、もしくは画面中央あたりの Email Testing の「Start Testing」ボタンをクリック。(※画像赤枠のいずれか)
1. SMTP Settings タブををクリック
Email Address, Auto Foward, Manual Forward, Access Rights タブも気になるところですが、有料プランでないと使えないっぽいのでスルーしましょう
2. Integrations セレクトボックスで、Laravel 7+ を選択
色々な言語、フレームワークに対応しているようですが、PHPだけ謎の充実
3. copy ボタンをクリックして、クリップボードに .env の情報を保存
※画像にある僕のアカウントのSMTP情報は、Credentials を既に破棄しているので利用できませんよ!
.env に登録
mailtrap からコピーした情報を、.env に貼り付ける。
既にパラメータが存在している場合は上書きしましょう。
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
Laravel キャッシュはしつこいので、念のためクリアしておく
php artisan config:clear
Laravel でメール送信。結果が Mailtrap に記録される
雑な Laravel サンプルコード
Mail::from('xxxxxxxxx@gmail.com')
->to('xxxxxxxxxx@gmail.com')
->send('テストメールだよ');
Mailtrap 画面
正常にメールが送信されていれば、My Inbox 内の赤枠部分に表示されます。
フリーアカウントの注意事項
- 1時間に 100 通までしか送信できない
- InBox に 50 通までしか保存できない
一斉送信などの機能テストだとすぐ制限に引っ掛かりそうですが、通常の1通ずつ送るような機能テストだとおそらく問題になることはないかな、と感じました。
制限に引っかかるような使い方をされる場合は、MailHog コンテナを利用するといいと思います。