Amazon SES と Sendmail の連携 - Amazon Simple Email Service

Amazon SES と Sendmail の連携

Sendmail は 1980 年代の初めにリリースされ、それ以降、継続的に改善されてきました。これは、大規模なユーザーコミュニティを持つ柔軟で設定可能な Message Transfer Agent (MTA) です。Sendmail は 2013 年に Proofpoint により買収されましたが、Proofpoint は Sendmail のオープンソースバージョンの提供を続けています。Sendmail のオープンソースバージョンは、Proofpoint のウェブサイトからダウンロードするか、ほとんどの Linux ディストリビューションのパッケージマネージャを経由してダウンロードできます。

このセクションの手順は、Amazon SES を介して E メールを送信するよう Sendmail を設定する方法を示しています。この手順は Ubuntu 18.04.2 LTS を実行しているサーバーでテストされています。

注記

Sendmail はサードパーティー製のアプリケーションであり、Amazon Web Services では開発またはサポートされていません。このセクションの手順は情報提供のみを目的としており、予告なく変更される場合があります。

前提条件

このセクションの手順を完了する前に、以下の手順を完了する必要があります。

  • Sendmail パッケージをサーバーにインストールします。

    注記

    使用しているオペレーティングシステムのディストリビューションに応じて、sendmail-cfm4、および cyrus-sasl-plain のパッケージのインストールが必要になる場合があります。

  • 差出人アドレスとして使用する ID を確認します。詳細については、「Amazon SES での E メールアドレスの検証」を参照してください。

    アカウントがまだ Amazon SES サンドボックスにある場合は、E メールの送信先のアドレスも検証する必要があります。詳細については、「Amazon SES サンドボックスの外への移動」を参照してください。

Amazon SES を使用して Amazon EC2 インスタンスから E メールを送信する場合は、次の手順も実行する必要があります。

  • Amazon SES を使用して Amazon EC2 インスタンスから E メールを送信する場合は、Elastic IP アドレスを Amazon EC2 インスタンスに割り当てて、E メールプロバイダーが E メールを受信できるようにする必要が生じる場合があります。詳細については、「Amazon EC2 Elastic IP アドレス」を参照してください。

  • Amazon SES を使用して Amazon EC2 インスタンスから E メールを送信する場合は、E メール送信制限解除申請フォームに入力する必要があります。この変更を申請すると、Amazon EC2 がデフォルトでポート 25 に適用する制限が解除されます。

Sendmail を設定する

このセクションの手順に従って、Amazon SES を使用して E メールを送信するように Sendmail を設定します。

重要

このセクションの手順は、米国西部 (オレゴン) AWS リージョンで Amazon SES を使用することを前提としています。別のリージョンを使用する場合は、この手順の email-smtp.us-west-2.amazonaws.com のすべてのインスタンスをご希望リージョンの SMTP エンドポイントに置き換えてください。Amazon SES を利用できる AWS リージョンの SMTP エンドポイント URL のリストについては、AWS General Referenceの「Amazon Simple Email Service (Amazon SES)」を参照してください。

Sendmail を設定するには

  1. ファイルエディタで、ファイル /etc/mail/authinfo を開きます。このファイルが存在しない場合は、作成します。

    以下の行を /etc/mail/authinfo に追加します。

    AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"

    上の例に、以下の変更を加えます。

    • email-smtp.us-west-2.amazonaws.com を、使用する Amazon SES SMTP エンドポイントに置き換えます。

    • smtpUsername を Amazon SES SMTP ユーザー名に置き換えます。

    • smtpPassword を Amazon SES SMTP パスワードに置き換えます。

    注記

    SMTP ユーザー名およびパスワードは、AWS アクセスキー ID およびシークレットアクセスキーとは異なります。SMTP ユーザー名とパスワードを取得する方法の詳細については、「Amazon SES SMTP 認証情報を取得する」を参照してください。

    終了したら、authinfo を保存します。

  2. コマンドラインで、以下のコマンドを入力して /etc/mail/authinfo.db ファイルを生成します。

    sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
  3. コマンドラインで、以下のコマンドを入力して Amazon SES SMTP エンドポイントに中継するためのサポートを追加します。

    sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'

    上のコマンドで、email-smtp.us-west-2.amazonaws.com を、使用する Amazon SES SMTP エンドポイントのアドレスに置き換えます。

  4. コマンドラインで、以下のコマンドを入力して /etc/mail/access.db を再生成します。

    sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
  5. コマンドラインで、以下のコマンドを入力して sendmail.cf および sendmail.mc ファイルのバックアップを作成します。

    sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
  6. 以下の行を、/etc/mail/sendmail.mc ファイルのすべての MAILER() 定義の前に追加します。

    define(`SMART_HOST', `email-smtp.us-west-2.amazonaws.com')dnl define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl MASQUERADE_AS(`example.com')dnl FEATURE(masquerade_envelope)dnl FEATURE(masquerade_entire_domain)dnl

    上のテキストで、次の操作を行います。

    • email-smtp.us-west-2.amazonaws.com を、使用する Amazon SES SMTP エンドポイントに置き換えます。

    • example.com を、E メールの送信に使用するドメインに置き換えます。

    終了したら、ファイルを保存します。

    注記

    Amazon EC2 は、デフォルトでポート 25 経由の通信を制限します。Sendmail を使用して Amazon EC2 インスタンスから E メールを送信する場合は、E メール送信制限解除申請に入力する必要があります。

  7. コマンドラインで、以下のコマンドを入力して sendmail.cf を書き込み可能にします。

    sudo chmod 666 /etc/mail/sendmail.cf
  8. コマンドラインで、以下のコマンドを入力して sendmail.cf を再生成します。

    sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
    注記

    「コマンドが見つかりません」や「そのようなファイルまたはディレクトリはありません」などといったエラーが発生した場合は、m4 パッケージと sendmail-cf パッケージがシステムにインストールされていることを確認します。

  9. コマンドラインで、以下のコマンドを入力して sendmail.cf の権限を読み取り専用にリセットします。

    sudo chmod 644 /etc/mail/sendmail.cf
  10. コマンドラインで、以下のコマンドを入力して Sendmail を再起動します。

    sudo /etc/init.d/sendmail restart
  11. 以下の手順を実行して、テスト E メールを送信します。

    1. コマンドラインで、以下のコマンドを入力します。

      /usr/sbin/sendmail -vf sender@example.com recipient@example.com

      sender@example.com を送信元 E メールアドレスに置き換えてください。recipient@example.com を送信先アドレスに置き換えます。終了したら、Enter キーを押します。

    2. 以下のメッセージの内容を入力します。各行の終わりで Enter キーを押します。

      From: sender@example.com To: recipient@example.com Subject: Amazon SES test email This is a test message sent from Amazon SES using Sendmail.

      E メールの内容を入力し終わったら、Ctrl+D キーを押して送信します。

  12. 受取人の E メールクライアントで E メールをチェックします。E メールが見つからない場合は、迷惑メールフォルダを確認します。それでも E メールが見つからない場合は、メールサーバー上の Sendmail ログを確認します。ログは通常は /var/log/mail.log にあります。