2017-11-11 160 views
2

我正在嘗試設置AWS SES,並且在閱讀/接收電子郵件時遇到問題。最終,我希望能夠使用Outlook或其他移動客戶端應用程序,以便查看使用SES發送/接收到驗證地址的電子郵件。收到/讀取SES郵件

我已經成功驗證了我的網域和電子郵件地址。另外,我已經設置了一個閱讀回執,將收到的來自SES的電子郵件轉發給S3存儲桶,但我不確定如何使用IMAP/POP3下載這些電子郵件。

我是否需要創建自己的電子郵件服務器,並與lambda函數一起將收到的電子郵件轉發到該服務器,以便我可以使用客戶端應用程序下拉這些電子郵件。有沒有辦法使用IMAP/POP3直接連接到SES?最後,我是否需要設置整個電子郵件堆棧,或者是否有一個簡單的(最好是NodeJS)郵件服務器,可以僅將電子郵件推送到客戶端。

謝謝,

回答

3

目前IMAP/POP3不支持SES。我有類似的要求,並在評估了幾種方法後,我使用了Lambda將電子郵件轉發到我的網絡郵件。

您可以使用以下Lambda代碼轉發轉發給SNS主題的電子郵件。

var AWS = require('aws-sdk'); 
var forwardFrom = process.env.from_address; 
var forwardTo = process.env.to_address; 
exports.handler = function(event, context) { 
    var msgInfo = JSON.parse(event.Records[0].Sns.Message); 

    // don't process spam messages 
    if (msgInfo.receipt.spamVerdict.status === 'FAIL' || msgInfo.receipt.virusVerdict.status === 'FAIL') { 
     console.log('Message is spam or contains virus, ignoring.'); 
     context.succeed(); 
    } 

    var email = msgInfo.content, 
     headers = "From: " + forwardFrom + "\r\n"; 
    headers += "Reply-To: " + msgInfo.mail.commonHeaders.from[0] + "\r\n"; 
    headers += "X-Original-To: " + msgInfo.mail.commonHeaders.to[0] + "\r\n"; 
    headers += "To: " + forwardTo + "\r\n"; 
    headers += "Subject: Fwd: " + msgInfo.mail.commonHeaders.subject + "\r\n"; 

    if (email) { 
     var res; 
     res = email.match(/Content-Type:.+\s*boundary.*/); 
     if (res) { 
      headers += res[0] + "\r\n"; 
     } else { 
      res = email.match(/^Content-Type:(.*)/m); 
      if (res) { 
       headers += res[0] + "\r\n"; 
      } 
     } 

     res = email.match(/^Content-Transfer-Encoding:(.*)/m); 
     if (res) { 
      headers += res[0] + "\r\n"; 
     } 

     res = email.match(/^MIME-Version:(.*)/m); 
     if (res) { 
      headers += res[0] + "\r\n"; 
     } 

     var splitEmail = email.split("\r\n\r\n"); 
     splitEmail.shift(); 

     email = headers + "\r\n" + splitEmail.join("\r\n\r\n"); 
    } else { 
     email = headers + "\r\n" + "Empty email"; 
    } 

    new AWS.SES().sendRawEmail({ 
     RawMessage: { Data: email } 
    }, function(err, data) { 
     if (err) context.fail(err); 
     else { 
      console.log('Sent with MessageId: ' + data.MessageId); 
      context.succeed(); 
     } 
    }); 
} 

注:您需要設置FROM_ADDRESS,並to_address與IAM角色一起爲此工作。

有關詳細信息步驟,請參閱以下介質文章,該文章還將鏈接到具有CloudFormation堆棧的Github存儲庫以進行自動配置。

Forwarding Emails to your Inbox Using Amazon SES

另外,您可以使用Amazon Workmail接收電子郵件,但它會增加包月費用。

+0

謝謝你的回答。我是否正確理解這一點......當SES收到一封「admin @ domain.com」的電子郵件時,會調用一個lambda函數以將該電子郵件轉發到另一個電子郵件地址,例如「example @ gmail.com」?如果是這樣,當'example @ gmail.com'回覆轉發的電子郵件時,'From'地址會顯示原始的收件人('admin @ domain.com')或轉發的電子郵件地址('example @ gmail。 com) – SuperVeetz

+0

當前的代碼替換原始發件人的電子郵件地址,因此當您收到電子郵件到Gmail時,它將來自您指定的地址。要保留原始發件人地址,您可能需要稍微修改代碼,以便您可以直接回復原始發件人。 – Ashan