メモメモメモ

ほんとうにめも

【Laravel】Amazon SESを使って任意のメールアドレスからシステムメールを送信する方法

前提

support@hoge.co.jp(gsuiteなどで作成したメールアドレス)からシステムメールを送信したい

手順

  1. メールアドレスを作成する(今回はGsuite)
  2. Amazon SESで Verify a New Email Address する(メールアドレスの認証)
  3. Amazon SESでSMTP credentialsの設定をする
  4. Laravelの環境変数を設定する
  5. 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 Statusverifiedになってるはず。

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