Invio di e-mail dall’host locale con Nodemailer

Mi piacerebbe inviare mail sul mio server locale ma sembra non funzionare con Nodemailer e NodeJS.

C’è qualche soluzione per inviare mail dal locale?

var contact = {subject: 'test', message: "test message", email: '[email protected]'}; var to = "[email protected]"; var transporter = nodemailer.createTransport(); transporter.sendMail({ from: contact.email, to: to, subject: contact.subject, text: contact.message }); 

 var nodemailer = require('nodemailer'); // Create a SMTP transport object var transport = nodemailer.createTransport("SMTP", { service: 'Hotmail', auth: { user: "username", pass: "password" } }); // Message object var message = { // sender info from: '[email protected]', // Comma separated list of recipients to: req.query.to , // Subject of the message subject:req.query.subject //'Nodemailer is unicode friendly ✔', // plaintext body text: req.query.text //'Hello to myself!', // HTML body /* html:'

Hello to myself

'+ '

Here\'sa nyan cat for you as an embedded attachment:

'*/ }; console.log('Sending Mail'); transport.sendMail(message, function(error){ if(error){ console.log('Error occured'); console.log(error.message); return; } console.log('Message sent successfully!'); // if you don't want to use this transport object anymore, uncomment //transport.close(); // close the connection pool });

Devi specificare il protocollo di trasporto come quello di SMTP o creare il tuo proprio trasporto. Non hai specificato questo nel tuo codice.

Non dovrebbe esserci un problema con l’esecuzione da un server locale.

Sembra che tu stia utilizzando il trasporto diretto, che è descritto nei documenti come:

… non affidabile poiché la porta in uscita 25 utilizzata è spesso bloccata di default. Inoltre, la posta inviata da indirizzi dinamici è spesso contrassegnata come spam. Dovresti davvero considerare l’utilizzo di un provider SMTP.

Una soluzione è definire un trasporto SMTP:

 var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: '[email protected]', pass: 'password' } }); 

Ci sono altre soluzioni qui , come usare un plugin di trasporto.

Indipendentemente da ciò, è difficile diagnosticare il problema quando non si aggiungono i callback alla funzione sendMail. Quando si invia la posta, farlo in questo modo e quindi è ansible controllare la console per vedere quale potrebbe essere l’errore:

 transporter.sendMail({ from: contact.email, to: to, subject: contact.subject, text: contact.message }, function(error, info){ if(error){ console.log(error); }else{ console.log('Message sent: ' + info.response); } }); 

Oltre a ciò che @cheniel ha detto: Assicurati che l’e-mail “da” sia la stessa e-mail utente dell’email nell’object transporter. E il “to” deve essere un’e-mail valida ed esistere (controllare se il valore è impostato correttamente (non indefinito e non null)).