Lightsailインスタンスはpostfixを動かしてもメールを送ることができないようです。
「数通だったら送れた」という情報も見受けられますが、うちで試したところ1通も送ることができませんでした。
これを解除することもできるようですが、何やら申請が必要なようでちょっと手間がかかりそうです。
他に何か方法がないか探していたところ、AWSのサービスの一つであるSimple Email Service(SES)というものが使えそうでした。
早速設定してみたので記事にしたいと思います。
前提条件
- AWSアカウントを持っていること
- サーバー運用に関する知識があること
- DNSレコードの設定ができること
- Lightsailインスタンスでpostfixが使える状態になっていること
Simple Email Serviceとは
簡単に言えば、メール配信サービスです。
自前でメールサーバーを立てなくてもSESを使えばメールの送受信が可能になります。
1000通当たり0.1USD、添付ファイル1GBにつき0.12USDなど、費用がかかる場合があるので要注意です。
SESの設定手順
- AWSマネジメントコンソールからSESを探します。
「カスタマーエンゲージメント」に分類されています。 - SESのトップ画面の左側にあるメニューから「Domains」をクリックし、上の方にある「Verify a New Domain」をクリックします。
- ダイアログが表示されるのでメール送信に使いたいドメインを入力し、「Generate DKIM Settings」にチェックを入れて「Verify This Domain」をクリックします。
- DNSレコードに設定する内容が表示されるのでその情報をドメインのDNSに設定し、終わったら「Close」をクリックします。
設定前に閉じてしまっても後で確認することは可能ですが、MXレコードに設定する内容は探すのが面倒なので控えておいた方がいいと思います。
(メール送信のみで受信する予定がない場合は不要) - 設定直後はpending状態になっていますが、DNSが適切に設定されていれば数分程度でverified状態に変わります。
verifiedが表示されれば送信元ドメインの設定は完了です。 - SESのトップ画面の左側にあるメニューから「SMTP Settings」をクリックし、「Create My SMTP Credentials」をクリックします。
- SESに関する権限を持つIAM Userの作成画面になるので下の方にある「作成」をクリックします。
- 作成が終わるとSMTPユーザーの認証情報がダウンロード及び表示できるので保存します。
尚、当該情報を確認できるのはここだけなのでご注意ください。 - 初期状態のSESはSandboxモードで動いています。
送信先のメールアドレスを予め設定・認証しておく必要があります。
SESのトップ画面の左側にあるメニューから「Email Addresses」をクリックし、「Verify a New Email Address」をクリックします。 - ダイアログが表示されるので送信先のメールアドレスを入力して「Verify This Email Address」をクリックします。
入力したメールアドレスに認証メールが届き、そのメールに記載の認証用URLをクリックすることでSESから当該メールアドレスにメールを送信することができるようになります。
postfixの設定手順
Lightsailインスタンスのpostfixの設定を変更して、SESを経由してメールを送れるように設定します。
現在のpostfixの状態によっては以下の説明と若干異なる部分があるかと思います。
予めご了承ください。
- /etc/postfix/main.cfを編集します。
下記の項目を修正、もしくは追記します。
尚、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
- /etc/postfix/master.cfを編集します。
下記の項目があればコメントアウトします。
(項目の先頭に#をつけます)# -o smtp_fallback_relay=
- /etc/postfix/sasl_passwdを編集します。
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
- postfixを再起動します。
sudo systemctl restart postfix
- テストメールの送信をしてみます。
echo "送信テスト本文" | mail -s "send test" -r 送信元メールアドレス 送信先メールアドレス
-sの後に指定するのがメールタイトルなのですが、日本語にすると文字コードの関係で送信できないようなのでご注意ください。
送信元メールアドレスのドメインは上記SESの設定手順5でverifiedになったドメイン、送信先メールアドレスは上記SESの設定手順10で登録したメールアドレスになります。
まとめ
意外と手間がかかりましたが、これでLightsailインスタンスからメールを送信することができるようになりました。
もしかしたら、postfixのrelayhostの設定で既存のメールサーバーを指定すればSESを使わなくてもいける気がしないでもないですが、SESを使ういい機会だと思い設定してみました。
Lightsailインスタンスからメールを送りたい方の参考になれば幸いです。
コメント