Esiste una libreria per NodeJS per l'invio di e-mail con allegato?Invio di e-mail con allegato tramite NodeJS
Con i migliori saluti, sdepold
Esiste una libreria per NodeJS per l'invio di e-mail con allegato?Invio di e-mail con allegato tramite NodeJS
Con i migliori saluti, sdepold
Sì, è abbastanza semplice, io uso nodemailer: npm install nodemailer --save
var mailer = require('nodemailer');
mailer.SMTP = {
host: 'host.com',
port:587,
use_authentication: true,
user: '[email protected]',
pass: 'xxxxxx'
};
Poi leggere un file e inviare una e-mail:
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
}
}
});
È possibile utilizzare nodejs-phpmailer
egli usa node.js , perché consigliarlo di usare una soluzione php? – zobi8225
Penso che usi node.js ma sia basato su php, un po 'lento e cattivo .. Ma penso che faccia il lavoro. –
Hai provato Nodemailer?
Nodemailer supports
- Unicode to use any characters
- HTML contents as well as plain text alternative
- Attachments
- Embedded images in HTML
- SSL (but not STARTTLS)
personalmente utilizzo Amazon SES riposo API o API Sendgrid resto che è il modo più coerente per farlo.
Se avete bisogno di utilizzare un approccio di basso livello https://github.com/Marak/node_mailer e configurare il proprio server SMTP (o uno si ha accesso troppo)
Vecchia risposta, ma in che modo un'API è più coerente di un server sendmail locale ...? –
è anche possibile utilizzare libreria di Amazon SES di AwsSum:
Lì, c'è un'operazione chiamata SendEmail e SendRawEmail, l'ultima delle quali in grado di inviare gli allegati tramite il servizio.
Prova con nodemailer, per esempio provate questo:
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
}
]
};
infine, inviare il messaggio
nodemailer.send_mail(message,
function(err) {
if (!err) {
console.log('Email send ...');
} else console.log(sys.inspect(err));
});
ReferenceError: data non definita - Mi manca una richiesta? –
Nodemailer per tutti i bisogni di posta nodejs. È semplicemente il migliore al momento: D
utilizzare il pacchetto di posta elettronica è molto flessibile e facile.
Non l'ho usato ma nodemailer (npm install nodemailer
) sembra quello che vuoi.
Un'altra libreria alternativa da provare è emailjs.
Ho dato qui alcuni suggerimenti, ma il codice di esecuzione si è lamentato del fatto che send_mail() e sendMail() non sono definiti (anche se copio semplicemente il codice incollato & con piccole modifiche). Sto usando il nodo 0.12.4 e npm 2.10.1. Non ho avuto problemi con emailjs, che ha funzionato bene per me. E ha un bel wrapper attorno agli allegati, quindi puoi allegarlo in vari modi a tuo piacimento e facilmente, rispetto agli esempi di nodemailer qui.
Invia con espresso-mailer (https://www.npmjs.com/package/express-mailer)
Invia PDF ->
var pdf="data:application/pdf;base64,JVBERi0xLjM..etc"
attachments: [ { filename: 'archive.pdf',
contents: new Buffer(pdf.replace(/^data:application\/(pdf);base64,/,''), 'base64')
}
]
Invia Immagine ->
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')
}
]
Send txt ->
attachments: [
{
filename: 'Hello.txt',
contents: 'hello world!'
}
]
Puoi anche fornire un codice di esempio minimo. In questo modo la risposta non è molto utile dato che non ho idea di dove posizionare gli allegati. – select
puoi utilizzare la versione ufficiale API di google per questo. Hanno fornito il pacchetto per il nodo per questo scopo. google official api
Ive ha attaccato parte del mio codice che ha fatto la cosa attaccamento per me
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;
}
PS grazie alla himanshu per la sua intensa ricerca su questo
Manca un '})' nell'ultima riga. Non posso modificare direttamente perché è inferiore a 6 caratteri ... –
Esiste un tipo per le proprietà degli allegati. "contenuti" non è corretto. dovrebbe essere "contenuto". – PyroJoke
@PyroJoke risolto, grazie per averlo sollevato – Philippe