LightsailからSimple Email Service(SES)経由でメールを送ってみた

Lightsailインスタンスはpostfixを動かしてもメールを送ることができないようです。
「数通だったら送れた」という情報も見受けられますが、うちで試したところ1通も送ることができませんでした。
これを解除することもできるようですが、何やら申請が必要なようでちょっと手間がかかりそうです。

他に何か方法がないか探していたところ、AWSのサービスの一つであるSimple Email Service(SES)というものが使えそうでした。
早速設定してみたので記事にしたいと思います。

目次

前提条件

  • AWSアカウントを持っていること
  • サーバー運用に関する知識があること
  • DNSレコードの設定ができること
  • Lightsailインスタンスでpostfixが使える状態になっていること

Simple Email Serviceとは

簡単に言えば、メール配信サービスです。
自前でメールサーバーを立てなくてもSESを使えばメールの送受信が可能になります。
1000通当たり0.1USD、添付ファイル1GBにつき0.12USDなど、費用がかかる場合があるので要注意です。

SESの設定手順

STEP
AWSマネジメントコンソールからSESを探します。

「カスタマーエンゲージメント」に分類されています。

STEP
SESのトップ画面の左側にあるメニューから「Domains」をクリックし、上の方にある「Verify a New Domain」をクリックします。
SESのトップ画面
STEP
ダイアログが表示されるのでメール送信に使いたいドメインを入力し、「Generate DKIM Settings」にチェックを入れて「Verify This Domain」をクリックします。
ドメイン名の入力
STEP
DNSレコードに設定する内容が表示されるのでその情報をドメインのDNSに設定し、終わったら「Close」をクリックします。

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

DNSレコードに設定する内容
STEP
設定直後はpending状態になっていますが、DNSが適切に設定されていれば数分程度でverified状態に変わります。

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

設定確認中
設定完了
STEP
SESのトップ画面の左側にあるメニューから「SMTP Settings」をクリックし、「Create My SMTP Credentials」をクリックします。
SMTPの設定
STEP
SESに関する権限を持つIAM Userの作成画面になるので下の方にある「作成」をクリックします。
IAMユーザーの作成
STEP
作成が終わるとSMTPユーザーの認証情報がダウンロード及び表示できるので保存します。

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

IAMユーザーの作成完了
STEP
初期状態のSESはSandboxモードで動いています。

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

送信先メールアドレスの認証
STEP
ダイアログが表示されるので送信先のメールアドレスを入力して「Verify This Email Address」をクリックします。

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

送信先メールアドレスの入力画面

postfixの設定手順

Lightsailインスタンスのpostfixの設定を変更して、SESを経由してメールを送れるように設定します。
現在のpostfixの状態によっては以下の説明と若干異なる部分があるかと思います。
予めご了承ください。

STEP
/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
STEP
/etc/postfix/master.cfを編集します。

下記の項目があればコメントアウトします。
(項目の先頭に#をつけます)

# -o smtp_fallback_relay=
STEP
/etc/postfix/sasl_passwdを編集します。

SMTPユーザーに関する設定になります。

main.cfのrelayhostに記載した内容 SMTPユーザー名:SMTPユーザーパスワード

上記のような形式になります。
うちの場合だと

[email-smtp.ap-northeast-1.amazonaws.com]:587 AAAAAAAAAAAAAAA:fsajlafsilfijfaij

このような感じです。(ユーザー名とパスワードは改変しました)
SMTPユーザーの情報は上記SESの設定手順8で表示されるものになります。

STEP
パスワードデータベースファイルを作成します。
sudo postmap hash:/etc/postfix/sasl_passwd
STEP
パスワードデータベースファイルの所有者とパーミッションの変更をして、不要ファイルの削除を行います。
sudo chown postfix sasl_passwd.db
sudo chmod 600 sasl_passwd.db
sudo rm sasl_passwd
STEP
postfixを再起動します。
sudo systemctl restart postfix
STEP
テストメールの送信をしてみます。
echo "送信テスト本文" | mail -s "send test" -r 送信元メールアドレス 送信先メールアドレス

-sの後に指定するのがメールタイトルなのですが、日本語にすると文字コードの関係で送信できないようなのでご注意ください。
送信元メールアドレスのドメインは上記SESの設定手順5でverifiedになったドメイン、送信先メールアドレスは上記SESの設定手順10で登録したメールアドレスになります。

まとめ

意外と手間がかかりましたが、これでLightsailインスタンスからメールを送信することができるようになりました。

もしかしたら、postfixのrelayhostの設定で既存のメールサーバーを指定すればSESを使わなくてもいける気がしないでもないですが、SESを使ういい機会だと思い設定してみました。

Lightsailインスタンスからメールを送りたい方の参考になれば幸いです。

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次