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 程序包。

    注意

    根据您使用的操作系统发行版,可能还需要安装以下程序包: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

本页内容: