【Laravel】Amazon SESを使って任意のメールアドレスからシステムメールを送信する方法
前提
support@hoge.co.jp(gsuiteなどで作成したメールアドレス)からシステムメールを送信したい
手順
- メールアドレスを作成する(今回はGsuite)
- Amazon SESで
Verify a New Email Address
する(メールアドレスの認証) - Amazon SESで
SMTP credentialsの設定
をする - Laravelの環境変数を設定する
- 「Amazon SES サンドボックスの外への移動」する
1. メールアドレスを作成する(今回はGsuite)
gsuiteにログインして、ダッシュボードから「ユーザ」を選択する。 「新しいユーザの追加」をクリックしてユーザを作成する。姓名は「姓: サービス名、名: サポート」とでもしておいて、メールアドレスを作成する。 これだけ。
2. Amazon SESで Verify a New Email Address
する(メールアドレスの認証)
AWSにログインして、SESのダッシュボードに行く。
サイドバーのIdentify Management
セクションにEmail Addresses
があるのでクリックする。
画面上部のVerify a New Email Address
クリックして、先ほど作成したメールアドレスを入力する。
確認メールが届くのでリンクをクリックする。するとSESのメールアドレス一覧にあるVerification Status
がverified
になってるはず。
3. Amazon SESでSMTP credentialsの設定
をする
SESのダッシュボード画面のサイドバーにあるEmail Sending
セクションにSMTP Settings
があるのでクリックする。
Create My SMTP Credentials
ボタンが目立つところにあるはずなので、クリックして次のページの右下にある「作成」ボタンをクリックする。
表示される(ダウンロードもできる)認証情報を控えておく。(SMTPユーザ名・SMTPパスワード)
4. Laravelの環境変数を設定する
MAIL_DRIVER=smtp MAIL_HOST=${SMTP Setting画面に書いてる} MAIL_PORT=${SMTP Setting画面に書いてる} MAIL_USERNAME=${3の「SMTPユーザ名」} MAIL_PASSWORD=${3の「SMTPパスワード」} MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=${1で作成したメールアドレス} MAIL_FROM_NAME=${サービス名や会社名など任意}
5. 「Amazon SES サンドボックスの外への移動」する
このままだと、認証されたメールアドレスにしかメールを送れない。 「好きなとこから」「好きなメールアドレスに」メールを送信するには、SESアカウントをSESのサンドボックス環境の外に出す必要がある。 これはセキュリティ上の理由で、
全てのSESアカウントはデフォルトでSESサンドボックス内に配置される
ことが原因。
参考リンクが詳しいので詳細は割愛。
解決方法としては、AWSのSupportCenterでService limit increase (サービスの上限緩和)
・SES Sending Limits (SES サービスの制限
を申請する。
・メーリングリストをどのように構築または取得しますか? ・バウンスや苦情はどのように処理しますか? ・受取人はお客様からの E メールの受信をどのようにオプトアウトできますか? ・このリクエストで指定した送信レートまたは送信クォータは、どのように選択しましたか?
これらの質問に答えなきゃいけない(SupportCenterには答えろとは書いてないが、書かないと申請が通らない)ので面倒。
追記(descriptionの例)
申請理由の説明: メーリングリストは、営業活動によって取得したユーザのメールアドレスになります。 ユーザは、サービス内の「設定」画面からメールの受信をオプトアウトできます。 バウンスメールに関しては、自社システム内で管理して次から同じメールアドレスにメールを送信しないようにしています。 メールの種類: システム通知
参考
【Laravel】AWSのSESメールサーバでユーザー登録時に確認メールを送信するまでの流れ(queueで非同期送信) - s u p ? Amazon SES サンドボックスの外への移動 - Amazon Simple Email Service