Amazon Simple Email Service
开发人员指南

将 Amazon SES 与 Postfix 集成

Postfix 是广泛使用的 Sendmail 邮件传输代理 (MTA) 的替代品。有关 Postfix 的更多信息,请转到 http://www.postfix.org。本主题中的步骤适用于 Linux, macOS, or Unix。

注意

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

先决条件

完成此部分中的过程之前,必须先执行以下任务:

  • 卸载 Sendmail (如果它已安装在您的系统中)。根据您使用的不同操作系统,完成此步骤的过程会有差异。

  • 安装 Postfix。根据您使用的不同操作系统,完成此步骤的过程会有差异。

  • 安装 SASL 身份验证软件包。根据您使用的不同操作系统,完成此步骤的过程会有差异。例如,如果您使用基于 RedHat 的系统,则应安装 cyrus-sasl-plain 软件包。如果您使用基于 Debian 或 Ubuntu 的系统,则应安装 libsasl2-modules 软件包。

  • 验证您用来发送电子邮件的电子邮件地址或域。有关更多信息,请参阅 在 Amazon SES 中验证电子邮件地址

  • 如果您的账户仍处于沙盒中,您只能将电子邮件发送到已验证的电子邮件地址。有关更多信息,请参阅脱离 Amazon SES 沙盒

配置 Postfix

完成以下步骤以配置您的邮件服务器,使用 Postfix 经由 Amazon SES 发送电子邮件。

配置 Postfix

  1. 在命令行处,键入以下命令:

    sudo postconf -e "relayhost = [email-smtp.us-west-2.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"

    注意

    如果在美国西部(俄勒冈)之外的 AWS 区域使用 Amazon SES,请将上述命令中的 email-smtp.us-west-2.amazonaws.com 替换为相应区域的 SMTP 终端节点。有关更多信息,请参阅区域和 Amazon SES

  2. 在文本编辑器中,打开文件 /etc/postfix/master.cf。搜索以下条目:

    -o smtp_fallback_relay=

    如果找到此条目,请在行首放置 #(井号)字符将其注释掉。保存并关闭文件。

    如果此条目不存在,请继续下一步。

  3. 在文本编辑器中,打开文件 /etc/postfix/sasl_passwd。如果该文件尚不存在,请创建它。

  4. 将以下行添加到 /etc/postfix/sasl_passwd

    [email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD

    注意

    SMTPUSERNAMESMTPPASSWORD 分别替换为您的 SMTP 用户名和密码。您的 SMTP 用户名和密码与您的 AWS 访问密钥 ID 和秘密访问密钥不同。有关凭证的更多信息,请参阅获取 Amazon SES SMTP 凭证

    如果在美国西部(俄勒冈)之外的 AWS 区域使用 Amazon SES,请将上面示例中的 email-smtp.us-west-2.amazonaws.com 替换为相应区域的 SMTP 终端节点。有关更多信息,请参阅 区域和 Amazon SES

    是否保存并关闭 sasl_passwd.

  5. 在命令提示符处,键入以下命令以创建一个包含您的 SMTP 凭证的 Hashmap 数据库文件:

    sudo postmap hash:/etc/postfix/sasl_passwd
  6. (可选)您在之前的步骤中创建的 /etc/postfix/sasl_passwd/etc/postfix/sasl_passwd.db 文件未加密。由于这些文件包含您的 SMTP 凭证,我们建议您修改这些文件的所有权和权限以限制对它们的访问。要限制对这些文件的访问,请执行以下操作:

    1. 在命令提示符处,键入以下命令以更改文件的所有权:

      sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
    2. 在命令提示符处,键入以下命令以更改文件的权限,以便仅根用户可读取和写入它们:

      sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
  7. 告诉 Postfix 在何处查找 CA 证书 (验证 Amazon SES 服务器证书需要它)。您在此步骤中使用的命令因所用操作系统而异。

    • 如果您使用 Amazon Linux、Red Hat Enterprise Linux 或相关分发,请键入以下命令:

      sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
    • 如果您使用 Ubuntu 或相关分发,请键入以下命令:

      sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
    • 如果您使用 macOS,则可通过您的系统密钥链生成证书。要生成证书,请在命令行处键入以下命令:

      sudo security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > /etc/ssl/certs/ca-bundle.crt

      生成证书之后,请键入以下命令:

      sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
  8. 键入以下命令以启动 Postfix 服务器(或在服务器已在运行的情况下,重新加载配置设置):

    sudo postfix start; sudo postfix reload
  9. 在命令行键入以下命令并在每行后按 Enter 以发送测试电子邮件。将 sender@example.com 替换为发件人电子邮件地址。发件人地址必须经过验证才能用于 Amazon SES。将 recipient@example.com 替换为目标地址。如果您的账户仍处于沙盒中,则还必须验证收件人地址。最后,邮件最后一行只能包含一个句点 (.),不能再有其他内容。

    sendmail -f sender@example.com recipient@example.com From: Sender Name <sender@example.com> Subject: Amazon SES Test This message was sent using Amazon SES. .
  10. 检查与收件人地址关联的邮箱。如果未收到电子邮件,请检查您的垃圾邮件文件夹。如果您仍然无法找到电子邮件,请检查用于发送电子邮件的系统上的邮件日志(通常位于 /var/log/maillog)以了解更多信息。

高级使用示例

此示例演示如何发送使用配置集的电子邮件,以及如何使用 MIME 多部分编码发送纯文本和 HTML 版本的消息以及附件。它还包含一个链接标签,可用于为单击事件分类。电子邮件的内容将在一个外部文件中指定,因此您不必在 Postfix 会话中手动键入命令。

使用 Postfix 发送多部分 MIME 电子邮件

  1. 在文本编辑器中,创建一个名为 mime-email.txt 的新文件。

  2. 在文本文件中,粘贴以下内容,并将红色的值替换为适用于您的账户的值:

    X-SES-CONFIGURATION-SET: ConfigSet From:Sender Name <sender@example.com> Subject:Amazon SES Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="YWVhZDFlY2QzMGQ2N2U0YTZmODU" --YWVhZDFlY2QzMGQ2N2U0YTZmODU Content-Type: multipart/alternative; boundary="3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ" --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Amazon SES Test This message was sent from Amazon SES using the SMTP interface. For more information, see: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <html> <head> </head> <body> <h1>Amazon SES Test</h1> <p>This message was sent from Amazon SES using the SMTP interface.</p> <p>For more information, see <a ses:tags="samplekey0:samplevalue0;samplekey1:samplevalue1;" href="http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html"> Using the Amazon SES SMTP Interface to Send Email</a> in the <em>Amazon SES Developer Guide</em>.</p> </body> </html> --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ-- --YWVhZDFlY2QzMGQ2N2U0YTZmODU Content-Type: application/octet-stream MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="customers.txt" SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENh bmFkYQo5MjM4OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixV bml0ZWQgU3RhdGVzCjI4OTMsQW5heWEsSXllbmdhcixJbmRpYQ== --YWVhZDFlY2QzMGQ2N2U0YTZmODU--

    保存并关闭文件。

  3. 在命令行处,键入以下命令。将 sender@example.com 替换为您的电子邮件地址,将 recipient@example.com 替换为收件人的电子邮件地址。

    sendmail -f sender@example.com recipient@example.com < mime-email.txt

    如果该命令成功运行,它将退出并且不提供任何输出。

  4. 查看收件箱中是否有该电子邮件。如果该邮件未送达,请查看系统的邮件日志。

有关与 Amazon SES 相关的各种主题的信息和讨论,请参阅 AWS 消息收发和目标博客。要浏览并发布问题,请转到Amazon SES 论坛