J'essaie d'envoyer des emails via nodemailer sans transport SMTP. Alors j'ai fait ça:
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
});
Mais quand je cours, je comprends ça:
> 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)
Je suis sur Windows 7 32.
MODIFIER Cela semble être un bogue lié à Windows car cela a fonctionné sur linux
EDIT # 2
Sur le shell git, si je saisis telnet smtp.gmail 587
, il est bloqué ici:
220 mx.google.com ESMTP f7...y.24 -gsmtp
D'après votre exemple de sortie, il semble que le mauvais port 25 se connecte, les ports smtp gmail ouverts sont 465 pour SSL et les 587 autres TLS.
Nodemailer détecte la configuration correcte en fonction du domaine de messagerie. Dans votre exemple, vous n'avez pas défini l'objet de transport afin qu'il utilise le port 25 configuré par défaut. Pour changer le port, spécifiez dans les options le type.
Voici le petit exemple qui devrait fonctionner avec 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
});
utilisez nodemailer 0.7.1.
si vous avez déjà installé nodemailer puis supprimez-le en
npm remove nodemailer
maintenant installez-le en
npm install [email protected]
le code suivant envoie un courrier sans connexion, mais cela ne fonctionnera qu'en environnement de production, cela ne fonctionnera pas localement
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
});
On dirait que la nodemailer
actuelle n’a plus la possibilité d’envoyer du courrier sans smtp. Je recommanderais de jeter un coup d'oeil à la bibliothèque sendmail qui N'EST PAS besoin de smtp/auth pour envoyer un email. Cela vous donne une expérience similaire à l'utilisation de sendmail sous 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)
})
Vous pouvez également activer la variable silent
pour la rendre moins explicite: const sendmail = require('sendmail')({silent: true});
. Une chose à noter est que l'expéditeur ne peut pas être ces domaines qui ont DMARC
policy like [email protected]
.
il est probable que le pare-feu ou l'antivirus Windows empêche l'accès sortant . essayez d'activer les messages de débogage de nodemailer.
Activer le débogage
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);
Cela semble être possible dans nodemailer. Pas sûr que ce ne soit pas là quand les autres réponses ont été fournies. Comme documenté ici: https://nodemailer.com/transports/sendmail/ .__, vous pouvez utiliser le sendmail intégré, s'il est disponible, pour l'envoi. J'ai testé cela pour mon propre usage et fonctionne bien. Il est évident que SMTP présente des avantages, mais il est faux de dire que ce n’est pas possible.
quand vous le voulez, cela permet d'envoyer des mails . https://www.google.com/settings/security/lesssecureapps Celui-ci a fonctionné pour moi
Vous devez avoir un serveur SMTP, un serveur de messagerie qui transfère les courriels en votre nom. Donc, soit vous configurez votre propre serveur SMTP comme Haraka, soit vous fournissez des informations d’identification à Nodemailer pour vous connecter à un, par exemple. Gmail, MSN, Yahoo. Même si j’ai commencé à apprendre NodeJs et que j’essayais d’inclure une fonctionnalité d’e-mailing dans mon projet, c’était le même problème que je rencontrais.