Amazon Simple Email Service
開発者ガイド

Amazon SES と Sendmail の統合

Sendmail は 1980 年代の初めにリリースされ、それ以降、継続的に改善されてきました。これは、大規模なユーザーコミュニティを持つ柔軟で設定可能な Message Transfer Agent (MTA) です。

Sendmail は 2013 年に Proofpoint により買収されましたが、Proofpoint は Sendmail のオープンソースバージョンの提供を続けています。Sendmail のオープンソースバージョンは、Proofpoint のウェブサイトからダウンロードできます。

このセクションの手順は、Amazon SES を介して E メールを送信するよう Sendmail を設定する方法を示しています。以降の手順は、64 ビット Amazon EC2 インスタンスで以下の Amazon マシンイメージ (AMI) を使用してテストしました。

  • Amazon Linux AMI 2015.09.2 (ami-8fcee4e5)

Amazon EC2 インスタンスの起動 (AMI の選択を含む) の詳細については、「Amazon マシンイメージ (AMI)」を参照してください。

前提条件

以降の各手順を実行する前に、次の点を検証してください。

  • Sendmail パッケージがコンピュータにインストールされており、Amazon SES を介さずに Sendmail を使用して正常に E メールを送信できること。

    注記

    Red Hat Linux を実行するコンピュータにパッケージがインストールされているかどうかを確認するには、rpm -qa | grep <package> と入力します (<package> はパッケージ名)。Ubuntu Linux を実行するコンピュータにパッケージがインストールされているかどうかを確認するには、dpkg -s <package> と入力します。

  • Sendmail パッケージに加え、sendmail-cf、m4、cyrus-sasl-plain のパッケージがコンピュータにインストールされていること。

  • 「From」アドレスを確認済みであり、アカウントがサンドボックスにまだある場合は「To」アドレスも確認済みである。詳細については、「Amazon SES での E メールアドレスの検証」を参照してください。

  • (オプション) Amazon SES を介して Amazon EC2 インスタンスから E メールを送信する場合は、受信側の ISP が E メールを受信できるように、必要に応じて Amazon EC2 インスタンスに Elastic IP アドレスを割り当てます。詳細については、「Amazon EC2 Elastic IP アドレス」を参照してください。

  • (オプション) Amazon EC2 インスタンスから Amazon SES 経由で E メールを送信する場合、E メール送信制限解除リクエストに必要事項を記入し、ポート 25 にデフォルトで適用される追加的な送信制限を解除できます。

STARTTLS を使用し、米国西部 (オレゴン) の Amazon SES エンドポイントを介して E メールを送信するように Sendmail を設定するには

  1. 編集する /etc/mail/authinfo ファイルを開きます。このファイルがない場合には、作成してください。

    重要

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

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

    • U:root - 変更しないでください。

    • I:USERNAME – USERNAME は、「Amazon SES SMTP 認証情報の取得」の手順を使用して取得した Amazon SES ユーザー名に置き換えます。これは AWS アクセスキー ID とは異なります。

    • P:PASSWORD – PASSWORD は、「Amazon SES SMTP 認証情報の取得」の手順を使用して取得した Amazon SES パスワードに置き換えます。これは AWS アクセスキーとは異なります。

    • M:LOGIN – LOGIN は、使用する認証方法に置き換えます。PLAIN、DIGEST-MD5 などです。

    AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:USERNAME" "P:PASSWORD" "M:LOGIN"

    ホスト名が一致しないために、Sendmail が Amazon SES SMTP エンドポイントで認証されない場合は、「Amazon SES SMTP に関する問題」で指定されている行を追加してみます。

  3. authinfo ファイルを保存します。

  4. コマンドプロンプトで、次のコマンドを入力し、/etc/mail/authinfo.db を生成します。

    sudo makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo
  5. /etc/mail/access ファイルを開き、次の行を追加して Amazon SES SMTP エンドポイントに中継するためのサポートを含めます。ホスト名が一致しないために、Sendmail が Amazon SES SMTP エンドポイントで認証されない場合は、「Amazon SES SMTP に関する問題」で指定されている行を追加してみます。

    Connect:email-smtp.us-west-2.amazonaws.com RELAY

    ファイルを保存します。

  6. コマンドプロンプトで、次のコマンドを入力し、/etc/mail/access.db を再生成します。

    sudo makemap hash /etc/mail/access.db < /etc/mail/access

  7. /etc/mail/sendmail.mc および /etc/mail/sendmail.cfのバックアップコピーを保存します。

  8. /etc/mail/sendmail.mc ファイルのすべての MAILER() 定義の前に、次の行グループを追加します。MAILER() 定義の後に FEATURE() 行を追加した場合、後続の手順で m4 を実行すると、"ERROR: FEATURE() should be before MAILER()." というエラーが表示されます。

    重要

    米国西部 (オレゴン) 以外の AWS リージョンを使用している場合、SMART_HOST 値は、使用しているリージョンの Amazon SES SMTP エンドポイントに置き換えます。「`」および「'」の各記号は、次のように正確に使い分けてください。

    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(`YOUR_DOMAIN')dnl FEATURE(masquerade_envelope)dnl FEATURE(masquerade_entire_domain)dnl
  9. 先ほど sendmail.mc に追加したテキスト内で、MASQUERADE_AS で始まる行の YOUR_DOMAIN を、E メール送信元のドメイン名に置き換えます。MASQUERADE_AS を追加することで、このホストからの E メールが見かけ上、ご利用のドメインから送信されているものとして認識されます。そうしない場合には、メールサーバーのホスト名が送信元として認識されるため、E メールを送信すると、"Email address not verified" というエラーが表示されます。

  10. sendmail.mc ファイルを保存します。

  11. コマンドプロンプトで次のコマンドを入力し、sendmail.cf を書き込み可能にします。

    sudo chmod 666 /etc/mail/sendmail.cf

  12. コマンドプロンプトで次のコマンドを入力し、sendmail.cf を再生成します。

    sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

    注記

    "Command not found" や "No such file or directory" のようなエラーが表示される場合には、上記の「前提条件」の項に記載されている方法で、m4 および sendmail-cf の各パッケージがインストールされていることを確認してください。

  13. コマンドプロンプトで次のコマンドを入力し、sendmail.cf の権限を読み取り専用にリセットします。

    sudo chmod 644 /etc/mail/sendmail.cf

  14. コマンドプロンプトで次のコマンドを入力し、Sendmail を再起動します。

    sudo /etc/init.d/sendmail restart

  15. 次の手順を実行して、テスト E メールを送信します。

    1. コマンドプロンプトで、以下を入力します。from@example.com は、Amazon SES で検証済みの「From」アドレスに置き換える必要があることに注意してください。to@example.com の部分は実際の「To」アドレスに置き換えます。アカウントがサンドボックスにまだある場合は、「To」アドレスも確認済みである必要があります。

      sudo /usr/sbin/sendmail -f from@example.com to@example.com
    2. <Enter> キーを押します。<Enter> キーで行を折り返しながらメッセージの本文を入力します。

    3. E メールの入力を終えたら、Ctrl+D キーを押して E メールを送信します。

  16. 受取人の E メールクライアントで E メールをチェックします。E メールが見つからない場合は、受取人の E メールクライアントの迷惑メールボックスをチェックしてください。それでも E メールが見つからない場合は、メールサーバー上の Sendmail ログを調べます。ログは通常、/var/spool/mail/<user> にあります。