

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Amazon SES 與 Sendmail 整合
<a name="send-email-sendmail"></a>

Sendmail 於 1980 年代初期推出，功能也持續改善。這是一個有大型使用者社群之靈活且可設定的訊息傳輸代理程式 (MTA)。Sendmail 是 Proofpoint 於 2013 年取得，但 Proofpoint 持續提供 Sendmail 的開放原始碼版本。您可以從 Proofpoint 網站下載[開放原始碼版本的 Sendmail](https://www.proofpoint.com/us/open-source-email-solution)，或是透過大多數 Linux 發行套件的套件管理工具取得。

本節中的程序示範如何設定 Sendmail 來透過 Amazon SES 傳送電子郵件。此程序已經在執行 Ubuntu 18.04.2 LTS 的伺服器上進行過測試。

**注意**  
Sendmail 是第三方應用程式，並非由 Amazon Web Services 開發或支援。本節中的程序僅供參考，如有變更，恕不另行通知。

## 先決條件
<a name="send-email-sendmail-prerequisites"></a>

在完成本節中的程序前，您應該先完成下列步驟：
+ 在您的伺服器上安裝 Sendmail 套件。
**注意**  
根據您使用的作業系統發行套件，您可能也需要安裝下列套件：`sendmail-cf`、`m4` 及 `cyrus-sasl-plain`。
+ 驗證身分以做為您的「寄件人」地址。如需詳細資訊，請參閱[建立電子郵件地址身分](creating-identities.md#verify-email-addresses-procedure)。

  如果您的帳戶在 Amazon SES 沙盒中，您還必須驗證傳送電子郵件的地址。如需詳細資訊，請參閱[請求生產存取權 （移出 Amazon SES 沙盒）](request-production-access.md)。

如果您使用 Amazon SES 從 Amazon EC2 執行個體傳送電子郵件，您也應該完成下列步驟：
+ 您可能需要將彈性 IP 地址指派給 Amazon EC2 執行個體，接收電子郵件供應商才能接受您的電子郵件。如需詳細資訊，請參閱《[Amazon EC2 使用者指南》中的 Amazon EC2 彈性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)。 *Amazon EC2 *
+ Amazon Elastic Compute Cloud (Amazon EC2) 預設限制透過連接埠 25 傳送電子郵件流量。為了避免透過 SMTP 端點從 Amazon EC2 傳送電子郵件時發生逾時，您可以請求移除這些限制。如需詳細資訊，請參閱[如何從 Amazon EC2 執行個體或 AWS Lambda 函數移除連接埠 25 的限制？](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/) AWS 知識中心的 。

  或者，您可以修改本節中的程序，使用連接埠 587 而非連接埠 25。

## 設定 Sendmail
<a name="send-email-sendmail-procedure"></a>

完成本節中的步驟，將 Sendmail 設定為使用 Amazon SES 傳送電子郵件。

**重要**  
本節中的程序假設您想要在美國西部 （奧勒岡） 使用 Amazon SES AWS 區域。若想要使用不同的區域，請以所需區域的 SMTP 端點取代此程序中所有的 *email-smtp.us-west-2.amazonaws.com* 執行個體。如需可使用 Amazon SES 的 之 SMTP 端點 URL 清單，請參閱 *AWS 一般參考* 中的 [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)。

**設定 Sendmail**

1. 在檔案編輯器中開啟檔案 `/etc/mail/authinfo`。如果檔案不存在，請先建立檔案。

   將下行新增至 */etc/mail/authinfo*：

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

   在上述範例中，進行下列變更：
   + 以您想要使用的 Amazon SES SMTP 端點取代 *email-smtp.us-west-2.amazonaws.com*。
   + 以您的 Amazon SES SMTP 使用者名稱取代 *smtpUsername*。
   + 以您的 Amazon SES SMTP 密碼取代 *smtpPassword*。
**注意**  
您的 SMTP 登入憑證與您的 AWS 存取金鑰 ID 和私密存取金鑰不同。如需取得 SMTP 登入憑證的詳細資訊，請參閱 [取得 Amazon SES SMTP 憑證](smtp-credentials.md)。

   完成時，請儲存 `authinfo`。

1. 在命令列輸入下列命令來產生 `/etc/mail/authinfo.db` 檔案：

   ```
   sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
   ```

1. 在命令列輸入下列命令以新增轉發至 Amazon SES SMTP 端點的支援。

   ```
   sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'
   ```

   在上述命令中，以您想要使用的 Amazon SES SMTP 端點地址取代 *email-smtp.us-west-2.amazonaws.com*。

1. 在命令列輸入下列命令來重新產生 */etc/mail/access.db*：

   ```
   sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
   ```

1. 在命令列輸入下列命令來建立 `sendmail.cf` 和 `sendmail.mc` 檔案的備份：

   ```
   sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
   ```

1. 在 */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
   ```

   針對上述文字執行以下事項：
   + 以您想要使用的 Amazon SES SMTP 端點取代 *email-smtp.us-west-2.amazonaws.com*。
   + 以您要用來傳送電子郵件的網域取代 *example.com*。

   完成後，儲存檔案。
**注意**  
Amazon EC2 預設會限制通過連接埠 25 的通訊。如果您使用在 Amazon EC2 執行個體中使用 Sendmail，您應該完成[請求移除電子郵件傳送限制](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request)。

1. 在命令列輸入下列命令，將 *sendmail.cf* 設為可寫入狀態：

   ```
   sudo chmod 666 /etc/mail/sendmail.cf
   ```

1. 在命令列輸入下列命令來重新產生 *sendmail.cf*：

   ```
   sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
   ```
**注意**  
如果發生「找不到命令」和「沒有此類檔案或目錄」等錯誤，請確定您已經在系統中安裝 `m4` 及 `sendmail-cf` 套件。

1. 在命令列輸入下列命令，將 *sendmail.cf* 的權限重新設定為唯讀狀態：

   ```
   sudo chmod 644 /etc/mail/sendmail.cf
   ```

1. 在命令列輸入下列命令來重新設定 Sendmail：

   ```
   sudo /etc/init.d/sendmail restart
   ```

   *根據 Linux 或 Sendmail 的版本，如果上述內容無法運作，請嘗試以下操作:*

   ```
   sudo su service sendmail restart
   ```

1. 完成下列步驟來傳送測試電子郵件：

   1. 在命令列輸入下列命令。

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

      以您的寄件者電子郵件地址取代 *sender@example.com*。以收件者地址取代 *recipient@example.com*。完成後，按下 Enter。

   1. 輸入下列訊息內容。按下每行尾端的 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\$1D 傳送郵件。

1. 檢查電子郵件的收件人電子郵件客戶端。如果您找不到電子郵件，請檢查垃圾郵件資料夾。如果您仍然找不到電子郵件，請檢查郵件伺服器上的 Sendmail 日誌。此日誌通常位於 */var/log/mail.log* 或 */var/log/maillog*。