将亚马逊SES与 Postfix 集成 - Amazon Simple Email Service

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

将亚马逊SES与 Postfix 集成

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

注意

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

先决条件

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

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

    重要

    以下对 sendmail 的引用指的是 Postfix 命令 sendmail,不要与 Sendmail 应用程序混淆。

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

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

  • 验证您用来发送电子邮件的电子邮件地址或域。有关更多信息,请参阅 创建电子邮件地址身份

  • 如果您的账户仍处于沙盒中,您只能将电子邮件发送到已验证的电子邮件地址。有关更多信息,请参阅 申请生产访问权限(移出 Amazon SES 沙箱)

配置 Postfix

完成以下步骤,将您的邮件服务器配置为SES使用 Postfix 通过亚马逊发送电子邮件。

配置 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 = secure" \ "smtp_tls_note_starttls_offer = yes"
    注意

    如果您在美国西部(俄勒冈)以外的 AWS 地区使用 AmazonSES,请更换 email-smtp.us-west-2.amazonaws.com 在前面的命令中,使用相应区域的SMTP终端节点。有关更多信息,请参阅 地区和亚马逊 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
    注意

    Replace(替换) SMTPUSERNAME 以及 SMTPPASSWORD 使用您的SMTP登录凭证。您的SMTP登录凭据与您的 AWS 访问密钥 ID 和私有访问密钥不同。有关凭证的更多信息,请参阅获取亚马逊SESSMTP凭证

    如果您在美国西部(俄勒冈)以外的 AWS 地区使用 AmazonSES,请更换 email-smtp.us-west-2.amazonaws.com 在前面的示例中,使用相应区域的SMTP终端节点。有关更多信息,请参阅 地区和亚马逊 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 证书(验证亚马逊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 以发送测试电子邮件。Replace(替换) sender@example.com 使用您的发件人电子邮件地址。发件人地址必须经过验证才能在 Amazon 上使用SES。Replace(替换) 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-multipart 编码发送纯文本和邮件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. 在命令行处,键入以下命令。Replace(替换) sender@example.com 用你的电子邮件地址,然后替换 recipient@example.com 使用收件人的电子邮件地址。

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

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

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