将 Amazon SES 与 Sendmail 集成 - Amazon Simple Email Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon SES 与 Sendmail 集成

Sendmail 最初于 20 世纪 80 年代初发布,此后一直在不断改进。这是一个灵活且可配置的邮件传输代理 (MTA) 并拥有大型的用户社群。Sendmail 于 2013 年被 Proofpoint 收购,但 Proofpoint 继续提供开源版本的 Sendmail。您可以从 Proofpoint 网站或通过大多数 Linux 发行版的程序包管理器下载 Sendmail 的开源版本

本节中的操作步骤说明如何配置 Sendmail 以通过 Amazon SES 发送电子邮件。已在运行 Ubuntu 18.04.2 LTS 的服务器上测试此过程。

注意

Sendmail 是第三方应用程序,不由 Amazon Web Services 开发或支持。本节中的步骤仅供参考,如有变更,恕不另行通知。

先决条件

在完成本节中的过程之前,您应完成以下步骤:

  • 在您的服务器上安装 Sendmail 程序包。

    注意

    根据您使用的操作系统发行版,可能还需要安装以下程序包:sendmail-cfm4cyrus-sasl-plain

  • 验证要用作“From (发件人)”地址的身份。有关更多信息,请参阅 创建电子邮件地址身份

    如果您的账户仍在 Amazon SES 沙盒中,那么您还必须验证您将电子邮件发送到的地址。有关更多信息,请参阅 请求生产访问权限(从 Amazon SES 沙盒中移出)

如果您使用 Amazon SES 从亚马逊 EC2 实例发送电子邮件,则还应完成以下步骤:

配置 Sendmail

完成本节中的步骤,通过使用 Amazon SES 配置 Sendmail 来发送电子邮件。

重要

本节中的步骤假设您想在美国西部(俄勒冈)使用 Amazon SES AWS 区域。如果您要使用其他区域,请将此过程中的所有 email-smtp.us-west-2.amazonaws.com 实例替换为所需区域的 SMTP 端点。有关可用 Amazon SES 的 SMTP 终端节点 URLs 列表,请参阅中的 AWS 区域 亚马逊简单电子邮件服务 (Amazon SES) ServiceAWS 一般参考

配置 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.cfsendmail.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替换为您要用于发送电子邮件的域名。

    完成后,保存该文件。

    注意

    默认情况下,Amazon EC2 限制通过端口 25 进行通信。如果您在亚马逊 EC2 实例中使用 Sendmail,则应完成取消电子邮件发送限制的请求

  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'
    注意

    如果您遇到“Command not found (找不到命令)”和“No such file or directory (无此类文件或目录)”等错误,请确保您的系统上安装了 m4sendmail-cf 程序包。

  9. 在命令行中,键入以下命令可将 sendmail.cf 的权限重置为只读:

    sudo chmod 644 /etc/mail/sendmail.cf
  10. 在命令行中,键入以下命令可重新启动 Sendmail:

    sudo /etc/init.d/sendmail restart

    如果上述方法不起作用,请尝试以下操作,具体取决于 Linux 或 Sendmail 的版本:

    sudo su service sendmail restart
  11. 完成以下步骤可发送测试电子邮件:

    1. 在命令行输入以下命令。

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

      sender@example.com替换为您的 “发件人” 电子邮件地址。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.

      在输入完电子邮件内容后,按 Ctrl+D 发送电子邮件。

  12. 检查收件人的电子邮件客户端是否收到这封电子邮件。如果您无法找到电子邮件,请检查垃圾邮件文件夹。如果您仍无法找到电子邮件,请查看邮件服务器上的 Sendmail 日志。日志通常位于/var/log/mail.log/var/log/maillog