2016-09-22 3 views
0

Я пытаюсь приложить PDF-сообщение по электронной почте с помощью Amazon ses.sendEmail. Но я не знаю ключ param для этого. Без приложения он отлично работает. Вот что я пробовал.Amazon ses.sendEmail - как подключить файл pdf?

`вар SES = новые AWS.SES()

  var params = { 
       Destination: { 
        ToAddresses: [ 
         'xxx', 
        ] 

       }, 
       Message: { 
        Body: { 
         Html: { 
          Data: msg, 
          Charset: 'UTF-8' 
         } 

        }, 
        Subject: { /* required */ 
         Data: 'Test Mail', 
         Charset: 'UTF-8' 
        } 
       }, 
       Attachment:{ 

       }, 
       Source: 'yyy' 
      }; 
      ses.sendEmail(params, function(err, data) { 
       if (err) {// an error occurred} 
        oDialog.close(); 
        MessageToast.show("Email not sent. Some problem occurred!"); 
       } 
       else { 
        oDialog.close(); 
        MessageToast.show("Email sent successfully!"); 
       } 
      });` 

ответ

1

Для любого другого, кто хочет для добавления вложений в электронную почту SES, вот что я сделал для лямбда в nodejs: используйте nodemailer с транспортом SES.

npm install --save nodemailer 

и в коде:

// create Nodemailer SES transporter 
const transporter = nodemailer.createTransport({ 
    SES: new AWS.SES({ 
    apiVersion: '2010-12-01', 
    region: "eu-west-1", // SES is not available in eu-central-1 
    }) 
}); 

const emailTransportAttachments = []; 
if (attachments && attachments.length !== 0) { 
    emailTransportAttachments = attachments.map(attachment => ({ 
    filename: attachment.fileName, 
    content: attachment.data, 
    contentType: attachment.contentType, 
    })); 
} 
const emailParams = { 
    from, 
    to, 
    bcc, 
    subject, 
    html, 
    attachments: emailTransportAttachments, 
}; 

return new Promise((resolve, reject) => { 
    transporter.sendMail(emailParams, (error, info) => { 
    if (error) { 
     console.error(error); 
     return reject(error); 
    } 
    console.log('transporter.sendMail result', info); 
    resolve(info); 
    }); 
}); 
1

В настоящее время вы можете отправлять вложения, если вы используете необработанный API электронной почты, например:

var ses_mail = "From: 'Your friendly UI5 developer' <" + email + ">\n" 
    + "To: " + email + "\n" 
    + "Subject: AWS SES Attachment Example\n" 
    + "MIME-Version: 1.0\n" 
    + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n\n" 
    + "--NextPart\n" 
    + "Content-Type: text/html; charset=us-ascii\n\n" 
    + "This is the body of the email.\n\n" 
    + "--NextPart\n" 
    + "Content-Type: text/plain;\n" 
    + "Content-Disposition: attachment; filename=\"attachment.txt\"\n\n" 
    + "Awesome attachment" + "\n\n" 
    + "--NextPart"; 

var params = { 
    RawMessage: { Data: new Buffer(ses_mail) }, 
    Destinations: [ email ], 
    Source: "'Your friendly UI5 developer' <" + email + ">'" 
}; 

var ses = new AWS.SES(); 

ses.sendRawEmail(params, function(err, data) { 
    if(err) { 
     oDialog.close(); 
     MessageToast.show("Email sent successfully!"); 
    } 
    else { 
     oDialog.close(); 
     MessageToast.show("Email sent successfully!"); 
    }   
}); 
+0

Спасибо за Ваш ответ. Я попробовал это. Он работает с форматами .txt. Когда я пытаюсь подключить pdf, он поврежден при получении электронной почты. Есть ли решение для этого? – Hari

+0

Нетекстовые вложения должны быть закодированы. Вы можете посмотреть здесь дополнительную информацию и некоторый код Javascript, который может облегчить это: https://github.com/ikr0m/mime-js – jpenninkhof

+0

Как я могу передать закодированное почтовое сообщение ses.sendRawEmail(). Преобразовал мои параметры почты как «var mimeTxt = Mime.toMimeTxt (mail); var mimeObj = Mime.toMimeObj (mimeTxt);'. Должен ли я давать «mimeObj» для данных RawMessage. Если я делаю это, он возвращает ошибку, так как данные RawMessage принимают только строки, blob, typed array – Hari