AmazoneSESを使ってメール送信する(SMTPリレー)

こんにちは。プラットフォームの小宮です。
ちょっと前にAmazoneSESを使ってSMTPリレーでメール送信の設定をしたのでその記録を公開させていただきます。

※SDKでなくSMTPリレーのほうを試します。(SDKつかうにはサーバにruby入っていてruby使う必要があるため。)

★SESの申し込みをする
SESのサービスダッシュボードに「RequestProductionAccess」というボタンがあるのでそれを押すと
お問い合わせ画面が出てくるので、必要な内容を入力する
(名前とサービスドメインとメールアドレスとメールの用途など)
Request Production Access to Simple Email Service(お問い合わせ)
入力送信すると、
リクエストありがとう、1日も早く使えるように審査するからマニュアル読んでお待ちください
と英文メッセージが出る。

申請の翌日SESのダッシュボードを確認したところ、以下の標記になっていた

24時間に10000通まで送ることが可能
現在の使用率は0%
最大送信レートは秒間5通

送信元は以下と教えていただいた
→ 会員登録時「no_reply@hoge.jp」というメールを送信、
問合せ時「support@hoge.jp」というメールを受信(転送)、

受信するのでMXレコードが要ることが発覚。別途設定する。
securitygroupも25番全開にしないといけない模様です。

とりあえず SESで送信元となるメールアドレスはVerified Sendersに登録する必要があるので以下を登録する

no_reply@hoge.jp
support@hoge.jp
no_reply@stg.hoge.jp
support@stg.hoge.jp

Verified Sendersに登録してみたところ以下のように
「メール受け取れたら確認された送信者リストに入るよ」という話なので
やっぱり受信できないとダメなようです。

となって、resendリンクが出ている状態となる。

★許可をいただいたのでpostfixのドメイン名を変更

stg環境:hoge.jp→stg.hoge.jp
本番環境:www.hoge.jp→hoge.jp
※stg環境と本番環境ともにhoge.jpとする要望だったが、
ドメインがおなじで中継させると送信に成功しなかったため。
メールの達人の先輩の意見:

・ドメイン同じにして考えられる事
発信元はxxx@a.comで中継サーバに出す。
中継元はa.comは自ドメインと認識してlocal配送して外に出さない

となる可能性が高いと思いますが、、、

web側

stg側
hoge.jp→stg.hoge.jpに後ほど他の設定と一緒に変更する。

★SMTPアカウント追加する(VerifySendersメール受信のため)

※先にskelにディレクトリを作り忘れたままアカウント作成した場合

エイリアスファイル内に万が一予約されててrootにメールが行く設定になってる場合は以下のように修正。

★MX登録

namedをリロードします

★SMTPCredensialを作る
Navigationの「SMTP Settings」を選択、
「CreateMySMTP Credentials」を押して
ユーザ名を必要なら修正しSMTP用IAMを作成する。

※これを後ほどsaslpasswordとして使う。

すると以下のようにAmazonSESのMTA情報が表示されている

★SMTP連携してみる
必要なパッケージを入れる

※mailxは入ってたしsystem-switch-mailはパッケージがなく
alternatives –config mtaで切り替える。(postfixしか入ってないので切替不要)

stunnelの設定をする(amazonses.comのメールMTAとSSLトンネルしてくれる)

※先ほど表示されたAmazonSESのMTA情報を設定します。

起動する

すると以下のようにポートがあいた。

コマンド起動だと危うい※ので起動スクリプトを用意して自動起動設定をする

※プロセスファイルが消されずに次回自動起動できなかったり色々問題が起こることがある

ステージングのMTA側でSESにリレーする設定をする(※本番環境はステージングにリレーしてます)

SES用のIAMのアクセスキーとシークレットキーをsaslパスワードとして設定する

さんこう:127.0.0.1:2525 YOUR_SMTP_USERNAME:YOUR_SMTP_PASSWORD

※SESに対してリレーしない場合のmilterをはずしておく。(ステージングでdkim-milterを設定してあったため)

★Verified Sendersの認証作業

※アカウントとそのメールディレクトリが存在し、
hostsとdnsの名前解決がうまくいってて受け取りたいドメインのMXレコードが登録してあって、
SecurityGroupで25番ポート(と465と587も必要に応じ)が全開なことを事前に確認してから
Verified Sendersを登録すると以下のようにメールが届く。

中身をみて書いてあるURLを参照すると、、

というメッセージが表示されるのでこれを登録した数だけ繰り返す。

すると、Verified Sendersに登録されたアカウントのStatusがverifiedになる。

★SESでDKIM(DomainKeyIdentifiedMail)をためす

ドメイン認証してみる
Verified SendersのEmailAddressesタブの隣にDomainsタブがあるのでそちらを選択し表示させる
VerifyNewDomain
でDomain:にhoge.jpを入力し、Generate DKIM Settingsにチェックを入れてVerifyThisDomainボタンを押す
すると
The domain hoge.jp has been added to the list of Verified Senders with a Status of “pending verification”. Further action is needed to complete verification of this domain. See details below.
レコードがいくつか出てくるので[copy record]のリンクを押してコピーする。(csvでダウンロードのリンクもある)
stg.hoge.jpもおなじことをする。CSVダウンロードしたものが以下。

DNS登録をする

ここで第3者確認を受ける

10分くらいで伝播されるはず。

Verified Sender: DomainのStatusがsuccessとなっていたのでDKIMのタブでenableのリンクを押す
あと、Verified Sender: EmailAddressesのタブで個別のEmailアカウントでもDKIMのタブでenableのリンクを押す必要がある。

※メール送信元認証とドメイン認証は両方やらないとだめなようです。

・メールを送ってみる

メールの送付経路:hoge-web01→hoge-stg01→amazonses.com→クライアント(試験はgmail等宛)

mail_toを変えつつgmailとiphoneとauガラケに届くことを確認。

※stgと本番環境それぞれテストする。

gmailのメールヘッダを確認する。

★失敗の履歴
Mar 11 14:14:19 ip-10-122-4-56 postfix/smtpd[8876]: connect from unknown[54.249.xxx.xxx]
と出て届かない。外側のEIPをmynetworksに入れてあげる必要がある模様。

どうやらSASLのパスワード認証に失敗している模様。

SESに対してリレーしない場合のmilterをはずしておく必要があった模様。

これで届くには届きました。

amazonses.com 経由が表示されてしまうのでspfレコードを何回か修正しましたが、
Verified Sender: EmailAddressesのタブで個別のEmailアカウントでも
DKIMのタブでenableのリンクを押す必要があっただけで、
それを押してもう一度送付したところamazonses.com 経由が消えました。

送信元も、webとstgどちらから送ってもドメインがhoge.jpになっていました。

★現在のzone情報確認:

★postfixのmain.cfのデフォルトとの差分

・hoge-stg01(ステージング環境、MTAサーバ)

・hoge-web01(本番環境、SMTPクライアント)

★参考:
公式マニュアル
Amazon Simple Email Service Developer Guide

SDKを使ったSESでのメール送信
AWS SDK for Rubyを使った添付ファイル付きメール送信プログラム(サンプル)

SMTPインターフェースを利用したSESでのメール送信
Amazon SESをSMTPインターフェースとして使う時のまとめ
stunnelの起動スクリプト
Amazon SESを設定

SESで簡単DKIM

Amazon SESで送信したメールの「amazonses.com経由」をなくす方法

PostfixをSMTPクライアントとしてSASL認証
PostfixをSMTPクライアントとしてSASL認証
Postfix SASL How
Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth)
How to Use Amazon SES SMTP Server to Send Emails
530 Authentication required (in reply to MAIL FROM command)

おすすめ記事