2017-11-11 156 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