Lightsailインスタンスはpostfixを動かしてもメールを送ることができないようです。
「数通だったら送れた」という情報も見受けられますが、うちで試したところ1通も送ることができませんでした。
これを解除することもできるようですが、何やら申請が必要なようでちょっと手間がかかりそうです。
他に何か方法がないか探していたところ、AWSのサービスの一つであるSimple Email Service(SES)というものが使えそうでした。
早速設定してみたので記事にしたいと思います。
前提条件
- AWSアカウントを持っていること
- サーバー運用に関する知識があること
- DNSレコードの設定ができること
- Lightsailインスタンスでpostfixが使える状態になっていること
Simple Email Serviceとは
簡単に言えば、メール配信サービスです。
自前でメールサーバーを立てなくてもSESを使えばメールの送受信が可能になります。
1000通当たり0.1USD、添付ファイル1GBにつき0.12USDなど、費用がかかる場合があるので要注意です。
SESの設定手順
「カスタマーエンゲージメント」に分類されています。


設定前に閉じてしまっても後で確認することは可能ですが、MXレコードに設定する内容は探すのが面倒なので控えておいた方がいいと思います。
(メール送信のみで受信する予定がない場合は不要)

verifiedが表示されれば送信元ドメインの設定は完了です。




尚、当該情報を確認できるのはここだけなのでご注意ください。

送信先のメールアドレスを予め設定・認証しておく必要があります。
SESのトップ画面の左側にあるメニューから「Email Addresses」をクリックし、「Verify a New Email Address」をクリックします。

入力したメールアドレスに認証メールが届き、そのメールに記載の認証用URLをクリックすることでSESから当該メールアドレスにメールを送信することができるようになります。

postfixの設定手順
Lightsailインスタンスのpostfixの設定を変更して、SESを経由してメールを送れるように設定します。
現在のpostfixの状態によっては以下の説明と若干異なる部分があるかと思います。
予めご了承ください。
下記の項目を修正、もしくは追記します。
尚、relayhostの部分に設定するサーバー名は上記SESの設定手順6で表示される「Server Name」を設定してください。
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
下記の項目があればコメントアウトします。
(項目の先頭に#をつけます)
# -o smtp_fallback_relay=
SMTPユーザーに関する設定になります。
main.cfのrelayhostに記載した内容 SMTPユーザー名:SMTPユーザーパスワード
上記のような形式になります。
うちの場合だと
[email-smtp.ap-northeast-1.amazonaws.com]:587 AAAAAAAAAAAAAAA:fsajlafsilfijfaij
このような感じです。(ユーザー名とパスワードは改変しました)
SMTPユーザーの情報は上記SESの設定手順8で表示されるものになります。
sudo postmap hash:/etc/postfix/sasl_passwd
sudo chown postfix sasl_passwd.db
sudo chmod 600 sasl_passwd.db
sudo rm sasl_passwd
sudo systemctl restart postfix
echo "送信テスト本文" | mail -s "send test" -r 送信元メールアドレス 送信先メールアドレス
-sの後に指定するのがメールタイトルなのですが、日本語にすると文字コードの関係で送信できないようなのでご注意ください。
送信元メールアドレスのドメインは上記SESの設定手順5でverifiedになったドメイン、送信先メールアドレスは上記SESの設定手順10で登録したメールアドレスになります。
まとめ
意外と手間がかかりましたが、これでLightsailインスタンスからメールを送信することができるようになりました。
もしかしたら、postfixのrelayhostの設定で既存のメールサーバーを指定すればSESを使わなくてもいける気がしないでもないですが、SESを使ういい機会だと思い設定してみました。
Lightsailインスタンスからメールを送りたい方の参考になれば幸いです。
コメント