[Laravel]AWS SESでのメールの送信に失敗するときにチェックすること

カテゴリ: aws, Laravel, PHP | タグ: ,

Laravelのメール送信で、AWSのSES(Simple Mail Service)を利用する場合、Laravelが提供しているsesドライバを使うと簡単にメール送信処理が実装できます。

本記事では、Laravelのsesドライバを使用して上手くメール送信ができない時に、ありがちな問題と解消方法を説明します。

よくある原因と対応

aws-sdk-phpのパッケージをインストールしていない

エラーメッセージ例

Class 'Aws\Ses\SesClient' not found


Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): 
Class 'Aws\\Ses\\SesClient' not found 
at .../vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php:98)

対応

必要なパッケージがないので、composerでパッケージをインストールします。

composer require aws/aws-sdk-php:~3.0

IAMロールに、SESのSendRawEmailに関する権限がない。

エラーメッセージ例

ログを控え損ねました...

対応

.envで指定した、AWS_ACCESS_KEY_IDに対するIAMロールを確認する、権限がなければ付与する。

クレデンシャル情報が間違っている、セットされていない

エラーメッセージ例

Error retrieving credentials from the instance profile metadata service. 
(cURL error 7:  (see https://curl.haxx.se/libcurl/c/libcurl-errors.html))   

(Aws\\Exception\\CredentialsException(code: 0): 
 Error retrieving credentials from the instance profile metadata service. 
 (cURL error 7:  (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)) 

 at .../server/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:240)"

対応

.envの下記にキーをセットする

# .env
MAIL_DRIVER=ses
AWS_ACCESS_KEY_ID=*****
AWS_SECRET_ACCESS_KEY=*****
AWS_DEFAULT_REGION=*****

クレデンシャル情報のリージョンが間違っている

原因

よくある誤りは、リージョンが東京になってしまっている.
(2020/03現在、東京リージョンでSESのサービスは提供されていないので間違えがち)

対応:

.envのAWS_DEFAULT_REGIONと、AWS consoleのリージョンを見比べる。

# .env
AWS_DEFAULT_REGION=*****

AWSの他のサービスを使っていて、SESのサービスだけリージョンを分けたい場合は、config/services.phpのキー名を書き換える

    'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        # 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
        'region' => env('SES_AWS_DEFAULT_REGION', 'us-east-1'),   # 接頭語にSES_を追加などして定義を分ける
    ],

.envやconfig/*.phpを変更した後に、キャッシュをクリアしていない。

エラー例

.envを設定したにもかかわらず、設定が反映されてないように見える。

原因

下記のコマンドでキャッシュをクリアする。
また、php artisan serveでサーバを起動している場合は再起動してみる。

php artisan cache:clear

メールの送信元アドレスが、AWS consoleのSESメールアドレスに登録されていない。

エラーメッセージ例

Email address is not verifiedエラーが出る。

Error executing "SendRawEmail" on "https://email.us-east-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-east-1.amazonaws.com` resulted in a `400 Bad Request` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>MessageReje (truncated...)
 MessageRejected (client): Email address is not verified.  The following identities failed the check in region US-EAST-1: root@example.com
 ...

対応

AWS Consoleで確認する。
SES Home -> Identity Management -> Email Addressesより送信元メールアドレスを確認する。送信元のメールアドレスが登録されてなければ追加する

Amazonでポイントを賢くGETする方法
Amazonギフト券チャージ で最大2.5%もお得!
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。