2017-11-11 17 views
2

나는 AWS SES을 설정하려고하는데 전자 메일을 읽거나받는 데 문제가 있습니다. 궁극적으로 SES를 사용하여 확인 된 주소로 보내거나받은 전자 메일을 보려면 Outlook이나 다른 모바일 클라이언트 응용 프로그램을 사용할 수 있어야합니다.이메일 수신/읽기 SES

이미 도메인과 이메일 주소를 성공적으로 확인했습니다. 또한 수신 된 이메일을 SES에서 S3 버켓으로 전달하는 읽음 수신을 설정했지만 IMAP/POP3을 사용하여 이메일을 푸시하는 방법을 잘 모르겠습니다.

lambda 기능과 함께 내 이메일 서버를 만들어야 수신 이메일을 해당 서버로 전달해야 클라이언트 응용 프로그램을 사용하여 이메일을 전송할 수 있습니다. IMAP/POP3를 사용하여 SES에 직접 연결할 방법이 있습니까? 마지막으로 전체 전자 메일 스택을 설정해야합니까, 아니면 전자 메일 만 클라이언트로 보낼 수있는 단순화 된 (선호하는 NodeJS) 메일 서버가 있습니까?

덕분에, 순간 IMAP에서

답변

3

는/POP3는 SES 지원되지 않습니다. 나는 비슷한 요구 사항을 가지고 여러 접근법을 평가 한 후에 람다를 사용하여 이메일을 웹 메일로 전달했습니다.

다음 람다 코드를 사용하여 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(); 
     } 
    }); 
} 

참고 :이 작업을 위해 당신은 IAM 역할과 함께 설치 FROM_ADDRESS 및 to_address해야합니다.

자세한 내용은 다음 매체 기사를 참조하십시오.이 기사는 자동 프로비저닝을위한 CloudFormation 스택이있는 Github 저장소에도 연결됩니다.

Forwarding Emails to your Inbox Using Amazon SES

또는 당신은 이메일을 수신하기 위해 아마존 Workmail를 사용할 수 있지만 월별 가입 비용을 추가합니다.

+0

답변 해 주셔서 감사합니다. 이 정보를 올바르게 이해하고 있습니까? SES가'[email protected] '에 대한 이메일을 받으면 람다 함수가 호출되어 해당 이메일을'example @ gmail.com '과 같은 다른 이메일 주소로 전달할 수 있습니까? 'example @ gmail.com'이 전달 된 전자 메일에 회신하면 '보낸 사람'주소는 원래 의도 한 수신자 ('admin @ domain.com') 또는 전달 된 전자 메일 주소 ('example @ gmail. com') – SuperVeetz

+0

현재 코드가 원래 보낸 사람 전자 메일 주소를 대체하므로 gmail에 전자 메일을 보내면 주소에서 지정한 주소에서 온 것입니다. 원래 보낸 사람 주소를 유지하려면 코드를 약간 수정해야 원래 보낸 사람에게 직접 회신 할 수 있습니다. – Ashan