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の設定手順

  1. AWSマネジメントコンソールからSESを探します。
    「カスタマーエンゲージメント」に分類されています。
  2. SESのトップ画面の左側にあるメニューから「Domains」をクリックし、上の方にある「Verify a New Domain」をクリックします。
    ドメイン認証
  3. ダイアログが表示されるのでメール送信に使いたいドメインを入力し、「Generate DKIM Settings」にチェックを入れて「Verify This Domain」をクリックします。
    ドメイン名入力
  4. DNSレコードに設定する内容が表示されるのでその情報をドメインのDNSに設定し、終わったら「Close」をクリックします。
    設定前に閉じてしまっても後で確認することは可能ですが、MXレコードに設定する内容は探すのが面倒なので控えておいた方がいいと思います。
    (メール送信のみで受信する予定がない場合は不要)

    DNSレコードの設定
  5. 設定直後はpending状態になっていますが、DNSが適切に設定されていれば数分程度でverified状態に変わります。
    verifiedが表示されれば送信元ドメインの設定は完了です。

    pending
    verified
  6. SESのトップ画面の左側にあるメニューから「SMTP Settings」をクリックし、「Create My SMTP Credentials」をクリックします。
    SMTP設定
  7. SESに関する権限を持つIAM Userの作成画面になるので下の方にある「作成」をクリックします。
    IAM User
  8. 作成が終わるとSMTPユーザーの認証情報がダウンロード及び表示できるので保存します。
    尚、当該情報を確認できるのはここだけなのでご注意ください。

    SMTPユーザー認証情報
  9. 初期状態のSESはSandboxモードで動いています。
    送信先のメールアドレスを予め設定・認証しておく必要があります。
    SESのトップ画面の左側にあるメニューから「Email Addresses」をクリックし、「Verify a New Email Address」をクリックします。

    メールアドレス認証
  10. ダイアログが表示されるので送信先のメールアドレスを入力して「Verify This Email Address」をクリックします。
    入力したメールアドレスに認証メールが届き、そのメールに記載の認証用URLをクリックすることでSESから当該メールアドレスにメールを送信することができるようになります。

    メールアドレス入力

postfixの設定手順

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

  1. /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
  2. /etc/postfix/master.cfを編集します。
    下記の項目があればコメントアウトします。
    (項目の先頭に#をつけます)

    # -o smtp_fallback_relay=
  3. /etc/postfix/sasl_passwdを編集します。
    SMTPユーザーに関する設定になります。

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

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

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

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

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

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

まとめ

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

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

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

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

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

コメント

コメントする

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

目次