この記事では、インスタンスを立ち上げた初期状態のAmazonLinux2のインスタンスに対して、Gmailへメール送信するための方法を記載します。LAMP環境は良く作っていたので感覚でできますが、メールサーバは、苦労しますね。
<今回実施したことのマニュアル>
Amazon Simple Email Service
前提条件の確認
ec2(linux)+postfix+AmazonSESでGmailへメール送信する際の前提条件は下記の2つです。
- SESでメールアドレスが承認されている
- AWSのEC2インスタンスを作成している
実行するコマンド
必要なソフトウェアのインストール
私が一番詰まったのは、インストールするソフトウェアです。
yum install cyrus-sasl syrus-sasl-plain syrus-sasl-lib cyrus-imapd cyrus-imapd-utils
postfixの設定ファイルの追記
/etc/postfix/main.cf を直接編集する方法もありますが、ここではマニュアル通りコマンドから実行します。
sudo postconf -e "relayhost = [email-smtp.ap-northeast-1.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"
赤字部分は、自分がお使いのSESのSMTPサーバにあわせてください。「AWSコンソール>AmazonSES>Account dashboard」から確認できます。
参考)SESの設定
SMTP認証用のパスワードファイルを作成
vi /etc/postfix/sasl_passwd [email-smtp.ap-northeast-1.amazonaws.com]:587 AKI**********:BAm***************
青字部分は、直前の画像の「Create SMTP credentials」で作成したユーザIDとパスワードを設定します。
SMTP認証用パスワードをpostfixが認識できるようにする+証明書の設定
sudo postmap hash:/etc/postfix/sasl_passwd 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 sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt' sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt' sudo postfix start; sudo postfix reload
sendmailコマンドで確認
次のコマンドで送信します。フォーマットはマニュアルに合わせてましょう。
sendmail -f 送信元アドレス 送信先アドレス From: sestest <送信元アドレス> Subject: Amazon SES Test This message was sent using Amazon SES. .
コマンドを打ったら、Gmailで確認しましょう
メールログ[/var/log/maillog]の確認
Feb 13 06:41:37 ip-172-31-15-236 postfix/postfix-script[2992]: starting the Postfix mail system Feb 13 06:41:37 ip-172-31-15-236 postfix/master[2995]: daemon started -- version 2.10.1, configuration /etc/postfix Feb 13 07:07:02 ip-172-31-15-236 postfix/postfix-script[3587]: fatal: the Postfix mail system is already running Feb 13 07:07:02 ip-172-31-15-236 postfix/postfix-script[3595]: refreshing the Postfix mail system Feb 13 07:07:02 ip-172-31-15-236 postfix/master[2995]: reload -- version 2.10.1, configuration /etc/postfix Feb 13 07:07:56 ip-172-31-15-236 postfix/pickup[3599]: 800A2844CAC: uid=0 from=<送信元アドレス@gmail.com> Feb 13 07:07:56 ip-172-31-15-236 postfix/cleanup[3606]: 800A2844CAC: message-id=<20220213070756.800A2844CAC@ip-172-31-15-236.ap-northeast-1.compute.internal> Feb 13 07:07:56 ip-172-31-15-236 postfix/qmgr[3600]: 800A2844CAC: from=<送信元アドレス@gmail.com>, size=408, nrcpt=1 (queue active) Feb 13 07:07:56 ip-172-31-15-236 postfix/smtp[3608]: 800A2844CAC: to=<送信先アドレス@gmail.com>, relay=email-smtp.ap-northeast-1.amazonaws.com[18.180.82.190]:587, delay=8.1, delays=7.7/0.03/0.14/0.14, dsn=2.0.0, status=sent (250 Ok 0106017ef1e8dbb4-071328e7-a949-4fcb-a3ed-a9e63ba29c19-000000) Feb 13 07:07:56 ip-172-31-15-236 postfix/qmgr[3600]: 800A2844CAC: removed
[status=sent]とという文字が出ていたら送信成功です。
それ以外になっていた場合は、postfixのmaillogのエラーメッセージを参考に解決してください。GoogleのSMTP認証エラーの場合は、下記が参考になりました。
SMTP エラー メッセージについて - Google Workspace 管理者 ヘルプ
SMTP は、メールサーバーがメールの送受信に使用するインターネット標準です。SMTP エラー メッセージは、メールが正常に送信されなかった原因を把
この手順をやるのに一番参考になった資料
YouTube
作成した動画を友だち、家族、世界中の人たちと共有
まとめ
一回できてしまえば、そんなものかと思いますが、、、最初は詰まりますね。
次は、Dockerコンテナから外部へメール送信です。
コメント