Laravelのメール送信にAWSのSESを利用する方法

今回は、Laravelのメール送信処理に、Amazon SESを利用する方法について示します。

Laravelのメール送信処理には、Amazon SESを利用することが出来るようになっています。
ドライバーをSESに変更して、必要な設定を済ませれば直ぐに変更することができますので、とても簡単に利用できます。

SESの設定

まず、Amazon SES APIを使用してメールを送信するための設定を事前に行います。

ここでは、簡易的な設定として、自分のメールアドレスを設定する例で説明します。

メールアドレスを有効にする

AWSコンソールの「SES > Email Addresses」にアクセスして、「Verify a New Email Address」をクリックします。

SESのメールアドレス設定

スクショのようにモーダルが開きますので、使用する任意のメールアドレスを入力して、「Verify This Email Address」をクリックします。

入力したメールアドレスに認証用のURLが記載されたメールが届きますので、URLを開いて認証を完了します。

アクセスキーを取得する

次に、Amazon SES APIを利用するためのアクセスキーを取得します。

AWSコンソールの「セキュリティ認証情報 > ユーザー」へと移動し、「ユーザーの追加」をクリックします。

AWS ユーザー追加 ステップ1

ユーザー名に、適当なユーザー名を入力します。
SDKから利用しますので、「プログラムによるアクセス」にチェックを入れて次へ進みます。

AWS ユーザー追加 ステップ2

SESを利用できるように権限を設定します。
「既存のポリシーを直接アタッチ」を選択して、「AmazonSESFullAccess」にチェックを入れて次へ進みましょう。

後の設定はデフォルトの状態でOKです。

最後まで進むと、「アクセスキー」と「シークレットアクセスキー」が表示されますので、CSVでダウンロードするかメモしておきます。

以上で、SESの設定は完了です。

※ プロダクション環境では、サンドボックスの解除などが必要です。ここではあくまでSESを簡易的に動作させるための簡単な設定です。

AWS SDKを追加

Amazon SES を利用してメール送信を行う場合、Amazon AWS SDK for PHPをインストールする必要があります。
下記のコマンドを実行して、ライブラリを追加します。

$ composer require aws/aws-sdk-php

LaravelのSESの設定

Laravelでメール送信処理にSESを利用するため、.envファイルに下記を設定します。

MAIL_DRIVER=ses
MAIL_FROM_ADDRESS=you@example.com
MAIL_FROM_NAME=Laravel

SES_KEY=*****
SES_SECRET=*****
SES_REGION=*****

MAIL_FROM_ADDRESSは、SESの設定で有効にしたメールアドレスを設定します。
SES_KEY, SES_SECRETには、SESの設定で取得したアクセスキー・シークレットアクセスキーを指定します。
SES_REGIONは、オレゴンの場合は「us-west-2」となります。

Laravelの設定は以上で完了です。

テストメールを送信する

試しにメールを送信してみましょう。

まず、テストメールクラスを作成します。

$ php artisan make:mail TestMail

作成されたapp/Mail/TestMail.phpを以下のように変更します。

# app/Mail/TestMail.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class TestMail extends Mailable
{
    use Queueable, SerializesModels;

    public function build()
    {
        return $this->view('emails.test');
    }
}

メールテンプレート用のviewファイルを作成します。

# resources/views/emails/test.blade.php

テストメールです。

コマンドラインから実行して、テストメールを送信してみますので、コマンドを作成します。
以下のコマンドを実行します。

$ php artisan make:command SendTestMail

作成された、app/Console/Commands/SendTestMail.phpを中身を以下のように書き換えます。
your emailは送信先のメールアドレスになりますので、自分のメールアドレスに変更します。

# app/Console/Commands/SendTestMail.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

class SendTestMail extends Command
{
    protected $signature = 'send_test_mail';

    protected $description = 'テストメールを送信します。';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        Mail::to('your email')->send(new TestMail());
    }
}

php artisan send_test_mailを実行してメールが届けば完了です。

さいごに

本番環境でSESを利用する場合は、サンドボックスの解除や、SPF・DKIMなどの認証設定も行う必要があります。
こちらに関しては、Amazon SESによるメール送信環境の構築と実践の記事がとても参考になります。

また、メール配信のバウンス率が上がらないように配慮したりも必要です。
この辺りに関しては、また今後記事でまとめようと思います。

  
人気Laravelの学習におすすめの本を2選!

この記事と関連している記事