ec2(linux)+postfix+AmazonSESでGmailへメール送信する

AWS

この記事では、インスタンスを立ち上げた初期状態のAmazonLinux2のインスタンスに対して、Gmailへメール送信するための方法を記載します。LAMP環境は良く作っていたので感覚でできますが、メールサーバは、苦労しますね。

<今回実施したことのマニュアル>

Amazon Simple Email Service

前提条件の確認

ec2(linux)+postfix+AmazonSESでGmailへメール送信する際の前提条件は下記の2つです。

  1. SESでメールアドレスが承認されている
  2. 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コンテナから外部へメール送信です。

コメント

タイトルとURLをコピーしました