Laravel 8のメール送信の例と、alwaysTo()を使って誤送信を防ぐ方法
- 2022年3月11日
- 技術情報
今回は、Laravel 8のメール送信の例と、alwaysTo()を使って誤送信を防ぐ方法を紹介します。
Laravel 8には、メール送信のためのmailクラスがあり、メール送信のためのドライバーを複数用意し、お好みで使用することができます。smtp、Mailgun、Postmark、Amazon SES、sendmailが使用できます。どのドライバを使用するかは、envファイルで設定する必要があります。
今回はsmtpドライバを使用します。
.envでSMTPを設定する
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=Add your user name here
MAIL_PASSWORD=Add your password here
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=Add your user name here
※メールを使い場合、googleアカウントのless secure app accessでturnをオンにする必要があります。
利用可能なメールクラスの作成
以下のコマンドを使用して、MyTestMailという名でメイラブルクラスを作成します。
php artisan make:mail MyTestMail
MyTestMailで以下のように変更する必要があり
public $details;
public function __construct($details)
{
$this->details = $details;
}
public function build()
{
return $this->subject('Mail from AMI')
->view('emails.myTestMail');
}
ブレードビューの作成
ブレードビューファイルを作成し、送信するメールを記述します。「emails」フォルダに以下のようなファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<title>メール送信テスト</title>
</head>
<body>
<h1>{{ $details['title'] }}</h1>
<p>{{ $details['body'] }}</p>
<p>Thank you</p>
</body>
</html>
最後に、テストメールを送信するための “MyTestMail “を作成します。
Route::get('send-mail', function () {
$details = [
'title' => 'Mail from AMI',
'body' => 'This is for testing email using smtp'
];
\Mail::to('name@gmail.com')->send(new \App\Mail\MyTestMail($details));
dd("Email is Sent.");
});
プロジェクトを実行すると結果は
ステージング環境から実際のお客様に誤って何千通ものメールを送信してしまうこともあります。その時、どうのように設定するのかを共有します。
class AppServiceProvider extends ServiceProvider
{
// Stuff omitted
public function boot()
{
f (! app()->environment('production')) {
Mail::alwaysTo('ex@example.org');
}
}
}
alwaysToで何が起きているのか?
alwaysTo() メソッドは、メールメッセージ内の to, cc, bcc に追加されたすべてのアドレスを上書きします。
そこで、上記のコードでは、Laravelに、本番環境でない場合のみ、ex@example.org にメールを送信するように指示しています。
ということで今回はこれで終わりです。
By Ami
asahi at 2022年03月11日 10:00:00