2016-09-22 2 views
0

J'essaie d'attacher le pdf dans le courrier électronique en utilisant Amazon ses.sendEmail. Mais je ne connais pas la clé param pour le faire. Sans attachement, cela fonctionne parfaitement. Voici ce que j'ai essayé.Amazon ses.sendEmail - comment joindre un fichier pdf?

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

Répondre

1

Pour quelqu'un d'autre qui veulent Pour ajouter des pièces jointes à un e-mail SES, voici ce que j'ai fait pour un lambda dans nodejs: utilisez nodemailer avec le transport SES.

npm install --save nodemailer 

et dans le 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

Actuellement, vous ne pouvez envoyer des pièces jointes si vous utilisez l'API email brut, par exemple:

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

Merci pour votre réponse. J'ai essayé ça. Cela fonctionne pour les formats .txt. Lorsque j'essaie de joindre un fichier PDF, il est corrompu lors de la réception d'un e-mail. Y a-t-il une solution pour cela? – Hari

+0

Les pièces jointes non textuelles doivent être codées. Vous pouvez jeter un oeil ici pour plus d'informations et un code Javascript qui peut faciliter cela: https://github.com/ikr0m/mime-js – jpenninkhof

+0

Comment puis-je donner un message e-mail codé à ses.sendRawEmail(). Convertis mes paramètres mail en 'var mimeTxt = Mime.toMimeTxt (mail); var mimeObj = Mime.toMimeObj (mimeTxt);'. Dois-je donner "mimeObj" aux données RawMessage. Si je le fais, il renvoie une erreur car les données RawMessage n'acceptent que les chaînes, blob, tableau typé – Hari