Existe-t-il une bibliothèque pour NodeJS permettant d'envoyer des mails avec pièce jointe?
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
}
}
});
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));
});
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)
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)
utiliser le logiciel de messagerie, il est très flexible et facile.
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.
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.
Vous pouvez utiliser nodejs-phpmailer
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!'
}
]
Nodemailer pour tous les besoins de messagerie de nodejs. C'est juste le meilleur en ce moment: D
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
Je ne l'ai pas utilisé mais nodemailer (npm install nodemailer
) ressemble à ce que vous voulez.