

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

# 将 Amazon SES 与 Postfix 集成
<a name="postfix"></a>

Postfix 是广泛使用的 Sendmail 邮件传输代理（MTA）的替代品。有关 Postfix 的信息，请访问。[http://www.postfix.org](http://www.postfix.org)本主题中的步骤适用于 Linux、macOS 或 Unix。

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

## 先决条件
<a name="send-email-postfix-prereqs"></a>

完成此部分中的过程之前，必须先执行以下任务：
+ 卸载 Sendmail 应用程序（如果它已安装在您的系统中）。根据您使用的不同操作系统，完成此步骤的过程会有差异。
**重要**  
以下对 *sendmail* 的引用指的是 Postfix 命令 `sendmail`，不要与 Sendmail 应用程序混淆。
+ 安装 Postfix。根据您使用的不同操作系统，完成此步骤的过程会有差异。
+ 安装 SASL 身份验证软件包。根据您使用的不同操作系统，完成此步骤的过程会有差异。例如，如果您使用 RedHat-based 系统，则应安装`cyrus-sasl-plain`软件包。如果您使用 Debian 或 Ubuntu-based 系统，则应安装该`libsasl2-modules`软件包。
+ 验证您用来发送电子邮件的电子邮件地址或域。有关更多信息，请参阅 [创建电子邮件地址身份](creating-identities.md#verify-email-addresses-procedure)。
+ 如果您的账户仍处于沙盒中，您只能将电子邮件发送到已验证的电子邮件地址。有关更多信息，请参阅 [请求生产访问权限（从 Amazon SES 沙盒中移出）](request-production-access.md)。

## 配置 Postfix
<a name="send-email-postfix"></a>

完成以下步骤来配置您的邮件服务器，以使用 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 = secure" \
   "smtp_tls_note_starttls_offer = yes"
   ```
**注意**  
如果您在美国西部（俄勒冈）以外的 AWS 地区使用 Amazon SES，请将前面的命令替换{{email-smtp.us-west-2.amazonaws.com}}为相应区域的 SMTP 终端节点。有关更多信息，请参阅 [区域和 Amazon SES](regions.md)。

1. 在文本编辑器中，打开 `/etc/postfix/master.cf`文件。搜索以下条目：

   ```
   -o smtp_fallback_relay=
   ```

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

   如果此条目不存在，请继续下一个步骤。

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

1. 将以下行添加到 `/etc/postfix/sasl_passwd`：

   ```
   [{{email-smtp.us-west-2.amazonaws.com}}]:587 {{SMTPUSERNAME}}:{{SMTPPASSWORD}}
   ```
**注意**  
将{{SMTPUSERNAME}}和{{SMTPPASSWORD}}替换为您的 SMTP 登录凭据。您的 SMTP 登录凭证与您的 AWS 访问密钥 ID 和秘密访问密钥不同。有关凭证的更多信息，请参阅[获取 Amazon SES SMTP 凭证](smtp-credentials.md)。  
如果您在美国西部（俄勒冈）以外的 AWS 地区使用 Amazon SES，请使用相应区域的 SMTP 终端节点替换上述示例{{email-smtp.us-west-2.amazonaws.com}}中的终端节点。有关更多信息，请参阅 [区域和 Amazon SES](regions.md)。

   是否保存并关闭 `sasl_passwd`。

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

   ```
   sudo postmap hash:/etc/postfix/sasl_passwd
   ```

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

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

      ```
      sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

   1. 在命令提示符处，键入以下命令以更改文件的权限，以便仅根用户可读取和写入它们：

      ```
      sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

1. 告诉 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 | sudo tee /etc/ssl/certs/ca-bundle.crt > /dev/null
     ```

     生成证书之后，请键入以下命令：

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```

1. 键入以下命令以启动 Postfix 服务器（或在服务器已在运行的情况下，重新加载配置设置）：

   ```
   sudo postfix start; sudo postfix reload
   ```

1. 在命令行键入以下命令并在每行后按 Enter 以发送测试电子邮件。{{sender@example.com}}替换为您的 “发件人” 电子邮件地址。From (发件人) 地址必须经过验证才能用于 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.                
   .
   ```

1. 检查与收件人地址关联的邮箱。如果未收到电子邮件，请检查您的垃圾邮件文件夹。如果您仍然无法找到电子邮件，请检查用于发送电子邮件的系统上的邮件日志（通常位于 `/var/log/maillog`）以了解更多信息。

## 高级使用示例
<a name="send-email-postfix-advanced"></a>

此示例说明如何发送一封使用[配置集](using-configuration-sets.md)的电子邮件，该电子邮件使用 MIME-multipart 编码发送纯文本和 HTML 版本的邮件以及附件。它还包含一个[链接标签](faqs-metrics.md#sending-metric-faqs-clicks-q5)，可用于为单击事件分类。电子邮件的内容将在一个外部文件中指定，因此您不必在 Postfix 会话中手动键入命令。

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

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

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

   ```
   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--
   ```

   保存并关闭 文件。

1. 在命令行处，键入以下命令。{{sender@example.com}}替换为您的电子邮件地址，然后{{recipient@example.com}}替换为收件人的电子邮件地址。

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

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

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