開発環境
- Docker
- Laravel9(PHP8.1)
- AWS Simple Email Service
概要
この記事では、LaravelでAWSのSESを使って、
シンプルで簡単にメールを送信する方法を紹介します。
メール送信にはAWSのメール送信サービス、SES(Simple Email Service)を使います。
この記事は以下の順番でお伝えします
- Laraveでのメール送信処理
- AWS SESの設定
Laraveでのメール送信処理
方法1:Mail::raw()
でシンプルメール
Mail::raw
を使うことで、Mailable
やview
ファイルを使わずに、シンプルにメールを送信することができます。
public function sendEmail()
{
Mail::raw('メール本文です', function ($message) {
$message->from('from_sample@example.co.jp');
$message->to('to_sample@example.co.jp');
$message->subject('メールの件名です');
});
}
Mail::raw()
の第一引数に、メール本文
->from
で差出元のアドレス
->to
で宛先のアドレス
->subject
で件名
変数を使ったバージョン
public function sendEmail()
{
$text = 'メール本文です';
$emailFrom = 'from_sample@example.co.jp';
$emailTo = 'to_sample@example.co.jp';
$subject = 'メールの件名です';
Mail::raw($text, function ($message) use ($emailFrom, $emailTo, $subject) {
$message->from($emailFrom);
$message->to($emailTo);
$message->subject($subject);
});
}
Mail::raw()
を使う方法はシンプルで簡単にメールを実装することができます。
ただ、メール本文をPHPの文字列で作成しているため、
文章の見た目を整えたい時や、テストの際少し苦労します。
方法2:Mail::send()
で美しい文章メール
メール本文を整えやすくするためには、Mail::send()
でLaravelのviewを使うのがおすすめです。
viewを使うとHTMLのようにタグが使えるため、PHPの文字列で送信するより文章の見た目を整えやすくなります。
Mail::send()
の第一引数で、viewファイルのPathを指定します
public function sendEmail()
{
Mail::send(
mails.sample, //第一引数
[
'text' => 'Laravel',
'name' => 'jose blog',
],
function ($message) {
$message->from('from_sample@example.co.jp');
$message->to('to_sample@example.co.jp');
$message->subject('メールの件名です');
});
}
Path指定の注意点
(resources/views/emails/sample.blade.php → emails/sample)
・viewsより下のパスから指定
・.blade.php
は省略
変数を使ってソースコードを綺麗にするとこんな感じです。
public function sendEmail()
{
$text = 'Laravel';
$name = 'jose blog';
$emailFrom = 'from_sample@example.co.jp';
$emailTo = 'to_sample@example.co.jp';
$subject = 'メールの件名です';
Mail::send(
mails.sample,
[
'text' => $text, //メール本文に渡す変数
'name' => $name //メール本文に渡す変数
],
function ($message) use ($emailFrom, $emailTo, $subject) {
$message->from($emailFrom);
$message->to($emailTo);
$message->subject($subject);
});
}
viewファイルの作り方
resources/views内にblade.phpファイルを作成するだけです。
※.blade.php
でないと変数が受け取れないので注意
例)resources/views/mail/sample.blade.php
<p>こんにちは</p>
<p>{{ $text }}のメール送信方法についてのおしらせです</p>
<p>viewを使うと変数でメール本文を変えることができます</p>
<p>From {{ $name }}</p>
送信メールの内容
===============================
こんにちは
Laravelのメール送信方法についてのおしらせです
viewを使うと変数でメール本文を変えることができます
From jose blog
===============================
まとめ
Laravelでメールを送信するMail::raw
とMail::send
の2パターン
メールの本文をPHPのテキストで作成するときはMail::raw
メールの本文をviewファイルで作成するときはMail::send
AWS SESで送信するための設定
- AWS SESドライバーをインストール
composer require aws/aws-sdk-php
- .envファイルに6つ変数を追加
※以下3つはAWSでほかサービスを使用している場合すでに設定されている可能性があります
AWS_ACCESS_KEY_ID = #IAMユーザーのアクセスキー
AWS_SECRET_ACCESS_KEY = #IAMユーザーのシークレットアクセスキー
AWS_DEFAULT_REGION= #所属するリージョン(東京の場合はap-northeast-1)
※以下3つはAWS SESのサービスで新たに設定します
MAIL_MAILER=ses
MAIL_FROM_ADDRESS=sample@test-ses.co.jp #@より前は自由、@の後はSESにて設定したドメインを設定
MAIL_FROM_NAME=jose #メールを受け取ったときの表示名(FROMに当たる部分)