Amazon AWS SES SMTP経由でのメール送信のトラブルシューティング

SendGrid から Amazon SES への移行でつまずいています。

app.yml の設定を共有してくださるか、私の設定が正しいか確認していただけませんか?

  ## TODO: 新しいアカウントの検証と通知送信に使用する SMTP メールサーバー
  DISCOURSE_SMTP_ADDRESS: email-smtp.eu-west-2.amazonaws.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: xxxxxxx
  DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxx"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)
  DISCOURSE_SMTP_AUTHENTICATION: login

ここで auth パラメータは正しいでしょうか?

何か見落としているでしょうか?

ドメインが SES で検証されているため、SMTP 認証パラメータは不要です。

また、まだ行っていない場合は、SES アカウントをサンドボックスモードから解放し、制限の引き上げを申請する必要があるかもしれません。サンドボックス条件はリージョンごとに適用されます。

はい、ドメインが検証済みで、本番モードにあり、レート制限も引き上げられたことを確認しました。

他はすべて問題なさそうですか?:thinking:

はい、他の設定も正しいように見えます。

パスワードが"マーク"で囲まれていても問題ありませんか?

はい、それも問題ありません。

うーん…

コマンドラインからテストする方法はありますか?

私は毎回アプリを再ビルドしています。

素早い返信ありがとうございます :+1:t2:

これも正しいでしょうか?(ご提案いただいた通り、認証行をコメントアウトしました)

AWS SES を通じてメールが送信されない理由が依然として見当がつきません。

Discourse の管理ページからテストメールを送信すると、単に「送信済み」と表示されるだけです。パスワード再設定のリクエストを試しても、手順は正しく進みますが、メールは決して届きません。

SES にはログが残らないようなので、実際にメールを受信しているかどうかを確認できません。

問題の原因となり得る可能性があるのは、返信先アドレスが当サイトのドメインではなく、gmail.com アカウントを使用している点だけです。

この組み合わせやシナリオに直面した経験がある方はいますか?

これは「From」行に表示されるメールアドレスです。SES が送信するドメイン内のアドレスである必要があります。SES は、Gmail から送信されているように偽装したメールを送信しません。gmail.com はあなたが管理できないため、SES は「From」行にそれを記載したメールを送信しません。notification_emailsomething@yourverifieddomain の形式にする必要があります。

もしかしたら、そういうことなのかもしれませんね。

現在の SendGrid の設定は長年問題なく動作しており、以下のような構成になっています:

返信先アドレスが gmail.com ドメインにあるため、SES では私が行おうとしていることが単純に不可能だ、とおっしゃっているのでしょうか?

通知メールは「From」行に記載されているもので、はい、それが問題であることはかなり確信しています。変更を試みましたか?

私も SES を使用しており、問題なく動作しています。私の設定との違いとして、DISCOURSE_SMTP_AUTHENTICATION: login という行が存在しない点が挙げられます。また、DISCOURSE_SMTP_ENABLE_START_TLS: trueDISCOURSE_SMTP_PORT: 587 は両方ともコメントアウトされていますが、これは影響しないはずです。

app.yml で私が変更するのは SMTP アドレス、ユーザー名、パスワードの 3 行だけです。残りは新規インストール時のデフォルト設定のままコメントアウトされています。再ビルド後は、サイト設定の「通知メール」を、SES で検証済みのドメインを使用するアドレスに設定しているか確認するだけです。パスワードにクォートは使用していませんが、以前のインストールではクォートありでもなしでも問題なく動作していました。

はい、上記の回答で推奨されているように、返信先アドレスを検証済みの SES ドメインを使用するアドレスに変更して、正常に送信されるかどうかを試す価値はあります。

それでも動作しない場合は、ホストが特定のポートをブロックしていないか確認し、SES の認証情報が正しく生成されたかを再確認してください。上記でドメインが SES で検証済みであることを確認されているようですが。

詳細な情報をありがとうございます @markersocial :+1:t2:

お伺いしてもよろしいでしょうか?「返信先」のメールアドレスと「送信元」のアドレスは、異なるドメインに設定されていますか? :thinking:

ご心配なく :slight_smile:

返信先アドレスは送信元ドメインと同じドメインですね。ただし、一部のケースでは同じサブドメインではありません(それでもルートドメインは同じです)。どちらの場合も私にとっては問題なく動作しています。

これはお気づきかと思いますが、Discourse が送信に使用する送信元メールアドレスの検証は完了しましたか?
もし notify@yourverifieddomain のような形式であれば、SES にログインし、「Identity Management」セクションの 2 行目にある送信メールアドレスを追加して検証する必要があります。これを行わない限り、メールは一切送信されません。
アラームもサイレンもありません。単に送信されないだけです。

Gmail を返信先として設定するのは素晴らしい選択です。私もそうしました。そうすることで、From と Reply の不一致によるスパムブロックを回避でき、メンバー向けの認証メールが正常に届くようになりました。

最終的には、受信メールを Discourse API に転送するシンプルな AWS Lambda を作成しました(学習に 1 週間かかりましたが)。非常にクリーンで、POSTFIX は不要です。