EC2(Postfix, CentOS7) + Amazon SESを使う
はじめに
メモなので、恐らくちょいちょい間違ってる
送信専用として使う
なので、受信は想定しない
前提
リージョンはオレゴン
独自ドメインを使用する場合は SES でドメイン検証を済ませておく
送信オンリーならいらないかもしれない
SMTP認証情報を発行しておく
リージョン毎に一意なので、発行するリージョンには気をつける
IAMユーザーで発行する認証情報とは別らしい
送信元となるEメールアドレスも登録しておく
Gmailなどフリーメールでも大丈夫らしい
手順
1. postfix のインストール
$ sudo yum install postfix
2. 関連パッケージのインストール
$ sudo yum install cyrus-sasl-plain
3. Postfix の設定を行う
$ sudo postconf -e "relayhost = [email-smtp.us-west-2.amazonaws.com]:587" \
"smtp_sasl_auth_enable = yes" \
"smtp_sasl_security_options = noanonymous" \
"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
"smtp_use_tls = yes" \
"smtp_tls_security_level = encrypt" \
"smtp_tls_note_starttls_offer = yes" \
"smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt"
リージョンがオレゴンではない場合は `email-smtp.us-west-2.amazonaws.com` が別の値になる
4. メール送信を受け付けを許可するアドレスを設定する
構築するメールサーバーが自分で送信する場合は不要
別サーバーからSMTP接続による送信を行う場合は必要
IPアドレスは接続元アドレスを指定する
$ sudo postconf -e "mynetworks = 172.0.0.0/8"
5. SAML認証情報をセットする
$ sudo vi /etc/postfix/sasl_passwd
<sasl_passwdファイル内>
[email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
`SMTPUSERNAME`と`SMTPPASSWORD`は前提で発行しているSMTP認証情報の内容を記載する
6. データベースファイル作成
$ sudo postmap hash:/etc/postfix/sasl_passwd
7. 認証情報ファイル及びデータベースファイルにアクセス制限をかける
$ sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
$ sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
8. postfix 再起動
$ sudo systemctl restart postfix
9. 動作確認(任意)
$ sendmail -f <送信元メールアドレス(前提で登録したアドレス)> <送信先メールアドレス>
From: Test Name <sender@example.com>
Subject: Amazon SES Test
This message was sent using Amazon SES.
.
メールが届かない場合は `/var/log/maillog` を確認する
`said: 535 Authentication Credentials Invalid` のエラーが出てれば恐らくSMTPの認証情報が間違ってる
SMTP認証情報を作る時にリージョンが間違ってるかもしれない
少なくとも自分はこれでずいぶん深く沼にハマった
参考サイト
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/postfix.html
https://densan-hoshigumi.com/aws/aws-postfix-ses-send-email
https://www.rem-system.com/mail-postfix01/