node.js - enviar - nodemailer sendemail
Nodemailer enviar correo electrónico sin el transporte smtp (7)
Cuando usted en su configuración, le permite enviar correos. https://www.google.com/settings/security/lesssecureapps este funcionó para mí
Estoy intentando enviar correos electrónicos a través de nodemailer sin el transporte SMTP. Así que he hecho eso:
var mail = require("nodemailer").mail;
mail({
from: "Fred Foo ✔ <[email protected]>", // sender address
to: "******@gmail.com", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world ✔", // plaintext body
html: "<b>Hello world ✔</b>" // html body
});
Pero cuando corro lo entiendo:
> node sendmail.js
Queued message #1 from [email protected], to [email protected]
Retrieved message #1 from the queue, reolving gmail.com
gmail.com resolved to gmail-smtp-in.l.google.com for #1
Connecting to gmail-smtp-in.l.google.com:25 for message #1
Failed processing message #1
Message #1 requeued for 15 minutes
Closing connection to the server
Error: read ECONNRESET
at errnoException (net.js:901:11)
at TCP.onread (net.js:556:19)
Estoy en windows 7 32.
EDIT Esto parece ser un error relacionado con Windows ya que funcionó en Linux
EDITAR # 2
En el shell git, si ingreso telnet smtp.gmail 587
, se bloquea aquí:
220 mx.google.com ESMTP f7...y.24 -gsmtp
Debe tener un servidor SMTP, un servidor de correo electrónico que reenvíe los correos electrónicos en su nombre. Entonces, configure su propio servidor SMTP como Haraka o proporcione credenciales a Nodemailer para conectarse a uno, por ejemplo, Gmail, MSN, Yahoo. Incluso empecé a aprender NodeJs e intenté incluir una función de correo electrónico en mi proyecto y este fue el mismo problema que enfrenté.
Desde la salida de su ejemplo, parece que se conecta al puerto 25 incorrecto, los puertos smtp de gmail que se abren son 465 para SSL y los otros 587 TLS.
Nodemailer detecta la configuración correcta basada en el dominio de correo electrónico, en su ejemplo, no ha configurado el objeto de transportador, por lo que utiliza el puerto predeterminado 25 configurado. Para cambiar el puerto especifique en opciones el tipo.
Aquí está el pequeño ejemplo que debería funcionar con gmail:
var nodemailer = require(''nodemailer'');
// Create a SMTP transport object
var transport = nodemailer.createTransport("SMTP", {
service: ''Gmail'',
auth: {
user: "[email protected]",
pass: "Nodemailer123"
}
});
console.log(''SMTP Configured'');
// Message object
var message = {
// sender info
from: ''Sender Name <[email protected]>'',
// Comma separated list of recipients
to: ''"Receiver Name" <[email protected]>'',
// Subject of the message
subject: ''Nodemailer is unicode friendly ✔'',
// plaintext body
text: ''Hello to myself!'',
// HTML body
html:''<p><b>Hello</b> to myself <img src="cid:note@node"/></p>''+
''<p>Here/'s a nyan cat for you as an embedded attachment:<br/></p>''
};
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 following line
//transport.close(); // close the connection pool
});
Esto parece ser posible en nodemailer. No estoy seguro si esto no existía cuando se proporcionaron las otras respuestas. Tal como se documenta aquí: https://nodemailer.com/transports/sendmail/ puede usar el sendmail incorporado si está disponible para hacer su envío. He probado esto para mi propio uso y funciona bien. Obviamente, hay ventajas de SMTP pero decir que no es posible no es cierto.
Parece que el nodemailer
actual ya no tiene la opción de enviar correos sin smtp. Recomendaría echar un vistazo a la biblioteca de sendmail que NO necesita ningún smtp / auth para enviar correo electrónico. Te da una experiencia similar al uso de sendmail en linux.
const sendmail = require(''sendmail'')();
sendmail({
from: ''[email protected]'',
to: ''[email protected]'',
subject: ''Hello World'',
html: ''Hooray NodeJS!!!''
}, function (err, reply) {
console.log(err && err.stack)
console.dir(reply)
})
También puede activar el silent
para hacerlo menos detallado: const sendmail = require(''sendmail'')({silent: true});
. Una cosa a tener en cuenta es que el remitente no puede ser esos dominios que tienen una policy DMARC
como [email protected]
.
Probablemente sea Windows Firewall o antivirus que impida el acceso saliente. intente habilitar los mensajes de depuración de nodemailer.
Habilitar depuración
var nodemailer = require("nodemailer"),
transport = nodemailer.createTransport(''direct'', {
debug: true, //this!!!
});
transport.sendMail({
from: "Fred Foo ✔ <[email protected]>", // sender address
to: "******@gmail.com", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world ✔", // plaintext body
html: "<b>Hello world ✔</b>" // html body
}, console.error);
utilizar nodemailer 0.7.1.
Si ya instaló nodemailer, retírelo por
npm remove nodemailer
ahora instálalo por
npm install [email protected]
el siguiente código envía correo sin inicio de sesión, pero funcionará solo en el entorno de producción, no funcionará localmente
var mail = require("nodemailer").mail;
mail({
from: "Fred Foo ✔ <[email protected]>", // sender address
to: "[email protected], [email protected]", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world ✔", // plaintext body
html: "<b>Hello world ✔</b>" // html body
});