LaravelとAWS SESを使ってメールを送信

AWS

Laravelでメール機能の実装をしましたのでその時の手順になります。
※Laravelは8系、AWSはEC2とSESという環境で設定しています。
また、メール送信のコードは既にあるものとします。

必要なドライバーをインストールする

こちらのコマンドを入力し、ドライバを入れておきます

composer require guzzlehttp/guzzle
composer require aws/aws-sdk-php

リーダブルに記載されてるとおりですね。

メール 8.x Laravel

SESでドメインを登録する

Verified identitiesより、Create Identifyで登録する

やったこと
・ドメインとメアド登録
 ・AWS上でテストメールを送信してみる
・sandbox解除

メアドの登録は、テスト用にも登録しておきました。
最低1つは登録すれば、とりあえずでSESを使ってのメール送信の動作確認ができるようになります。

Sandboxの解除は申請に理由を記載しますが、classmethodさんの記事を参考に、簡潔に記載したら一度却下されました…AWS側のコメントに従い回数など少し詳細に書き提出したら審査に通りました。

新たにIAMユーザーを作る

Laravelから接続する用のIAMユーザーを作ります。
ポイントとしては、アクセス権限は、AmazonSESFullAccessをあてることです。

こんな感じでIAM作れればOKです。
作った時にIDやアクセスキーが表示されますが、次のステップで使うので控えておきます。

AWSとLaravelを接続する

EC2の中で設定しました。
調べると、他のLaravelの.envファイルに記述して接続する記事が多かったのですが、
こちらの方がEC2のroot直下で設定でき、より安全かなと思い設定しました。

まず、EC2の中にawsのCLIがあるかを確認します(なければ入れる)

EC2にsshでログインして、ls -la で.awsディレクトリが存在していれば問題ないです。

次に、aws configure をうち、
AWS Access Key ID、AWS Secret Access Key、Default region name、Default output formatを入力して設定します

cd .aws をconfig、credentialsにそれぞれ設定した情報が入ってると思います。
confingにはDefault region name、Default output formatが、
credentialsにはAWS Access Key ID、AWS Secret Access Keyが設定されています。

そのあと、Laravelでは、.envのMAIL_MAILER=ses を設定すれば完了です。

メール送信をテストしてみて無事動作するか確認してみてください。

実装して感じたコツ

インフラ側とLaravel側との連携部分であるので、細々とテストメールを送ってみるなどした方がいいと思いました。
一旦AWS側でメールさえ送信できれば、あとはLaravel側での連携の仕方やコード上に問題がなければ成功できると思います。

LaravelでMailableを使ったメール送信も普通のCRUD処理と比べると少し違うクセがあるなと思いましたが、とにかくドキュメント通りに忠実にやればちゃんと送れるな、と思いました。機会あれば記事にしたいですね。

コメント

タイトルとURLをコピーしました