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 沙盒

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

  • 如果您使用 Amazon SES 从 Amazon EC2 实例发送电子邮件,则可能需要将弹性 IP 地址发送到 Amazon EC2 实例以便接收电子邮件提供商接受您的电子邮件。有关更多信息,请参阅 Amazon EC2 弹性 IP 地址

  • 如果您使用 Amazon SES 从 Amazon EC2 实例发送电子邮件,则应完成请求删除电子邮件发送限制表。请求此更改将删除 Amazon EC2 默认应用于端口 25 的发送限制。

配置 Sendmail

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

重要

本节中的过程假定您要使用美国西部(俄勒冈) AWS 区域中的 Amazon SES。如果要使用其他区域,请将此过程中的所有 email-smtp.us-west-2.amazonaws.com 实例替换为所需区域的 SMTP 终端节点。有关 Amazon SES 在其中可用的 AWS 区域的 SMTP 终端节点 URL 列表,请参阅 AWS General Reference 中的 Amazon Simple Email Service (Amazon SES)

配置 Sendmail

  1. 在文件编辑器中,打开文件 /etc/mail/authinfo。如果该文件不存在,请创建它。

    将以下行添加到 /etc/mail/authinfo

    AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"

    在前面的示例中,进行以下更改:

    • 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'
  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

    在前面的文本中,将 example.com 替换为您从中发送电子邮件的域。

    完成后,保存该文件。

  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
  11. 完成以下步骤可发送测试电子邮件:

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

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

      sender@example.com 替换为发件人电子邮件地址。将 recipient@example.com 替换为“To (收件人)”地址。完成后,按 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

本页内容: