web-dev-qa-db-fra.com

Envoi de mails avec pièce jointe via NodeJS

Existe-t-il une bibliothèque pour NodeJS permettant d'envoyer des mails avec pièce jointe?

21
sdepold

Oui, c'est assez simple, J'utilise nodemailer: npm install nodemailer --save

var mailer = require('nodemailer');
mailer.SMTP = {
    Host: 'Host.com', 
    port:587,
    use_authentication: true, 
    user: '[email protected]', 
    pass: 'xxxxxx'
};

Ensuite, lisez un fichier et envoyez un email: 

fs.readFile("./attachment.txt", function (err, data) {

    mailer.send_mail({       
        sender: '[email protected]',
        to: '[email protected]',
        subject: 'Attachment!',
        body: 'mail content...',
        attachments: [{'filename': 'attachment.txt', 'content': data}]
    }), function(err, success) {
        if (err) {
            // Handle error
        }

    }
});
48
Philippe

Essayez avec nodemailer, par exemple essayez ceci:

  var nodemailer = require('nodemailer');
  nodemailer.SMTP = {
     Host: 'mail.yourmail.com',
     port: 25,
     use_authentication: true,
     user: '[email protected]',
     pass: 'somepasswd'
   };

  var message = {   
        sender: "[email protected]",    
        to:'[email protected]',   
        subject: '',    
        html: '<h1>test</h1>',  
        attachments: [  
        {   
            filename: "somepicture.jpg",    
            contents: new Buffer(data, 'base64'),   
            cid: cid    
        }   
        ]   
    };

enfin, envoyez le message

    nodemailer.send_mail(message,   
      function(err) {   
        if (!err) { 
            console.log('Email send ...');
        } else console.log(sys.inspect(err));       
    });
4
omolina

Avez-vous essayé Nodemailer ?

Nodemailer prend en charge

  • Unicode pour utiliser tous les caractères
  • Contenu HTML ainsi que texte alternatif
  • Pièces jointes
  • Images incorporées en HTML
  • SSL (mais pas STARTTLS)
3
bpierre

Personnellement, j'utilise Amazon SES rest API ou Sendgrid rest API, qui est le moyen le plus cohérent de le faire.

Si vous avez besoin d'une approche de bas niveau, utilisez https://github.com/Marak/node_mailer et configurez votre propre serveur smtp (ou celui auquel vous avez également accès)

http://blog.nodejitsu.com/sending-emails-in-node

3
kilianc

utiliser le logiciel de messagerie, il est très flexible et facile.

1
Krunal Goswami

Vous pouvez également utiliser la bibliothèque Amazon SES d'AwsSum:

Il existe une opération appelée SendEmail et SendRawEmail, ce dernier pouvant envoyer des pièces jointes via le service.

1
chilts

Une autre bibliothèque alternative à essayer est emailjs

J'ai donné quelques-unes des suggestions ici à essayer moi-même mais le code en cours d'exécution s'est plaint que send_mail () et sendMail () sont indéfinis (même si je copie et colle simplement le code avec des ajustements mineurs). J'utilise les nœuds 0.12.4 et npm 2.10.1. Je n'ai eu aucun problème avec emailjs, cela a fonctionné juste pour moi. Et il a Nice wrapper autour des pièces jointes, de sorte que vous pouvez l'attacher de différentes façons à votre goût et facilement, par rapport aux exemples nodemailer ici.

1
David

Vous pouvez utiliser nodejs-phpmailer

1
Anatoliy

Envoyer avec express-mailer ( https://www.npmjs.com/package/express-mailer )

Envoyer PDF -> 

var pdf="data:application/pdf;base64,JVBERi0xLjM..etc"

attachments: [  {  filename: 'archive.pdf',
                  contents: new Buffer(pdf.replace(/^data:application\/(pdf);base64,/,''), 'base64')
                 }   
             ]

Envoyer une image -> 

var img = 'data:image/jpeg;base64,/9j/4AAQ...etc'
attachments: [  
             {  
               filename: 'myImage.jpg',
               contents: new Buffer(img.replace(/^data:image\/(png|gif|jpeg);base64,/,''), 'base64')
               }   
             ]

Envoyer un txt -> 

attachments: [  
             {  
               filename: 'Hello.txt',
               contents: 'hello world!'
               }   
             ]
0
Luis Sanchez

Nodemailer pour tous les besoins de messagerie de nodejs. C'est juste le meilleur en ce moment: D

0
StewartJarod

vous pouvez utiliser api officiel de google pour cela. Ils ont fourni un paquet pour node à cette fin. google official api

J'ai joint une partie de mon code qui fait l'attachement pour moi

function makeBody(subject, message) {
var boundary = "__myapp__";
var nl = "\n";
var attach = new Buffer(fs.readFileSync(__dirname + "/../"+fileName)) .toString("base64");
// console.dir(attach);
var str = [

        "MIME-Version: 1.0",
        "Content-Transfer-Encoding: 7bit",
        "to: " + receiverId,
        "subject: " + subject,
        "Content-Type: multipart/alternate; boundary=" + boundary + nl,
        "--" + boundary,
        "Content-Type: text/plain; charset=UTF-8",
        "Content-Transfer-Encoding: 7bit" + nl,
        message+ nl,
        "--" + boundary,
        "--" + boundary,
        "Content-Type: Application/pdf; name=myPdf.pdf",
        'Content-Disposition: attachment; filename=myPdf.pdf',
        "Content-Transfer-Encoding: base64" + nl,
        attach,
        "--" + boundary + "--"

    ].join("\n");

    var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');
    return encodedMail;
}

P.S merci à himanshu pour ses recherches intensives sur ce sujet

0
ishwar rimal

Je ne l'ai pas utilisé mais nodemailer (npm install nodemailer) ressemble à ce que vous voulez.

0
Ari Porad