2016-09-22 2 views
0

Ich versuche, pdf in E-Mail mit Amazon ses.sendEmail zu verbinden. Aber ich kenne den Param-Schlüssel nicht, um es zu tun. Ohne Befestigung funktioniert es perfekt. Hier ist was ich versucht habe.Amazon ses.sendEmail - wie PDF-Datei anhängen?

`var ses = new 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!"); 
       } 
      });` 

Antwort

1

Für alle anderen, die wollen um Anhänge zu einer SES-E-Mail hinzuzufügen, hier ist, was ich für ein Lambda in Nodejs getan habe: Verwenden Sie den Knoten-Mailer mit dem SES-Transport.

npm install --save nodemailer 

und im Code:

// 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

Derzeit können Sie nur Anhänge senden, wenn Sie die rohe E-Mail-API verwenden, zB:

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

Vielen Dank für Ihre Antwort. Ich habe es versucht. Es funktioniert für TXT-Formate. Wenn ich versuche, PDF anzuhängen, wird es beim Empfangen von E-Mail beschädigt. Gibt es dafür eine Lösung? – Hari

+0

Nicht-Text-Anhänge müssen codiert werden. Vielleicht möchten Sie hier nach mehr Informationen und etwas Javascript-Code suchen, der dies erleichtern kann: https://github.com/ikr0m/mime-js – jpenninkhof

+0

Wie kann ich codierte Mail-Nachricht an ses.sendRawEmail() geben. Konvertiert meine Mail-Parameter als 'var mimeTxt = Mime.toMimeTxt (mail); var mimeObj = Mime.toMimeObj (mimeTxt);'. Sollte ich "MimeObj" zu RawMessage Daten geben müssen. Wenn ich das tue, gibt es einen Fehler zurück, da RawMessage-Daten nur Strings, Blob und typisierte Arrays akzeptieren – Hari