本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将亚马逊SES与 Postfix 集成
Postfix 是广泛使用的 Sendmail 邮件传输代理 () 的替代方案。MTA有关 Postfix 的更多信息,请转到 http://www.postfix.org
注意
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
-
在命令行处,键入以下命令:
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。 -
在文本编辑器中,打开
/etc/postfix/master.cf
文件。搜索以下条目:-o smtp_fallback_relay=
如果找到此条目,请在行首放置
#
(井号)字符将其注释掉。保存并关闭文件。如果此条目不存在,请继续下一个步骤。
-
在文本编辑器中,打开
/etc/postfix/sasl_passwd
文件。如果该文件尚不存在,请创建它。 -
将以下行添加到
/etc/postfix/sasl_passwd
:[
email-smtp.us-west-2.amazonaws.com
]:587SMTPUSERNAME
:SMTPPASSWORD
注意
Replace(替换)
SMTPUSERNAME
以及SMTPPASSWORD
使用您的SMTP登录凭证。您的SMTP登录凭据与您的 AWS 访问密钥 ID 和私有访问密钥不同。有关凭证的更多信息,请参阅获取亚马逊SESSMTP凭证。如果您在美国西部(俄勒冈)以外的 AWS 地区使用 AmazonSES,请更换
email-smtp.us-west-2.amazonaws.com
在前面的示例中,使用相应区域的SMTP终端节点。有关更多信息,请参阅 地区和亚马逊 SES。是否保存并关闭
sasl_passwd
。 -
在命令提示符处,键入以下命令以创建包含您的SMTP凭据的 hashmap 数据库文件:
sudo postmap hash:/etc/postfix/sasl_passwd
-
(可选)您在之前的步骤中创建的
/etc/postfix/sasl_passwd
和/etc/postfix/sasl_passwd.db
文件未加密。由于这些文件包含您的SMTP证书,因此我们建议您修改文件的所有权和权限以限制对它们的访问。要限制对这些文件的访问,请执行以下操作:-
在命令提示符处,键入以下命令以更改文件的所有权:
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
-
在命令提示符处,键入以下命令以更改文件的权限,以便仅根用户可读取和写入它们:
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
-
-
告诉 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'
-
-
键入以下命令以启动 Postfix 服务器(或在服务器已在运行的情况下,重新加载配置设置):
sudo postfix start; sudo postfix reload
-
在命令行键入以下命令并在每行后按 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. . -
检查与收件人地址关联的邮箱。如果未收到电子邮件,请检查您的垃圾邮件文件夹。如果您仍然无法找到电子邮件,请检查用于发送电子邮件的系统上的邮件日志(通常位于
/var/log/maillog
)以了解更多信息。
高级使用示例
此示例说明如何发送一封使用配置集的电子邮件,该电子邮件使用 MIME-multipart 编码发送纯文本和邮件HTML版本以及附件。它还包含一个链接标签,可用于为单击事件分类。电子邮件的内容将在一个外部文件中指定,因此您不必在 Postfix 会话中手动键入命令。
使用 Postfix 发送多部分MIME电子邮件
-
在文本编辑器中,创建一个名为
mime-email.txt
的新文件。 -
在文本文件中,粘贴以下内容,并将红色的值替换为适用于您的账户的值:
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--保存并关闭文件。
-
在命令行处,键入以下命令。Replace(替换)
sender@example.com
用你的电子邮件地址,然后替换recipient@example.com
使用收件人的电子邮件地址。sendmail -f
sender@example.com
recipient@example.com
< mime-email.txt如果该命令成功运行,它将退出并且不提供任何输出。
-
查看收件箱中是否有该电子邮件。如果该邮件未送达,请查看系统的邮件日志。