Nodemailer发送电子邮件没有smtp传输

我试图通过nodemailer发送电子邮件没有SMTP传输。 所以我这样做了:

var mail = require("nodemailer").mail; mail({ from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address to: "******@gmail.com", // list of receivers subject: "Hello ✔", // Subject line text: "Hello world ✔", // plaintext body html: "<b>Hello world ✔</b>" // html body }); 

但是当我运行我得到的:

 > node sendmail.js Queued message #1 from foo@blurdybloop.com, to vinz243@gmail.com 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) 

我在Windows 7 32上。

编辑这似乎是一个Windows相关的错误,它在Linux上工作

编辑#2

在gitshell上,如果我inputtelnet smtp.gmail 587它在这里被阻塞:

 220 mx.google.com ESMTP f7...y.24 -gsmtp 

从您的示例输出,似乎连接到错误的端口25,打开的gmail smtp端口是465 SSL和其他587 TLS。

Nodemailer基于电子邮件域检测到正确的configuration,在您的示例中,您尚未设置传输器对象,因此它使用configuration的默认端口25。 要更改端口,请在选项中指定types。

下面是一个应该使用gmail的小例子:

 var nodemailer = require('nodemailer'); // Create a SMTP transport object var transport = nodemailer.createTransport("SMTP", { service: 'Gmail', auth: { user: "test.nodemailer@gmail.com", pass: "Nodemailer123" } }); console.log('SMTP Configured'); // Message object var message = { // sender info from: 'Sender Name <sender@example.com>', // Comma separated list of recipients to: '"Receiver Name" <nodemailer@disposebox.com>', // 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\'sa 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 }); 

使用nodemailer 0.7.1。
如果您之前安装了nodemailer,则将其删除

 npm remove nodemailer 

现在安装它

 npm install nodemailer@0.7.1 

下面的代码发送邮件没有login,但它只能在生产环境中工作,它不会在本地工作

 var mail = require("nodemailer").mail; mail({ from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address to: "bar@blurdybloop.com, baz@blurdybloop.com", // list of receivers subject: "Hello ✔", // Subject line text: "Hello world ✔", // plaintext body html: "<b>Hello world ✔</b>" // html body }); 

可能是Windows防火墙或防病毒阻止传出访问。 尝试启用nodemailerdebugging消息。

启用debugging

 var nodemailer = require("nodemailer"), transport = nodemailer.createTransport('direct', { debug: true, //this!!! }); transport.sendMail({ from: "Fred Foo ✔ <foo@blurdybloop.com>", // 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); 

看起来目前的nodemailer没有select发送邮件没有smtp了。 我build议看一下sendmail库,它不需要任何smtp / auth发送电子邮件。 它给你类似的经验,在Linux中使用sendmail。

 const sendmail = require('sendmail')(); sendmail({ from: 'test@finra.org', to: 'YourName@gmail.com', subject: 'Hello World', html: 'Hooray NodeJS!!!' }, function (err, reply) { console.log(err && err.stack) console.dir(reply) }) 

你也可以打开silent ,以减less冗长: const sendmail = require('sendmail')({silent: true}); 。 有一点需要注意的是,发件人不能是像xxx@capitalone.com那样拥有DMARC 策略的域。

您需要有一个SMTP服务器,一个以您的名义转发电子邮件的电子邮件服务器。 因此,要么像Haraka一样设置自己的SMTP服务器,要么提供凭据给Nodemailer连接到一个例如Gmail,MSN,Yahoo。 即使我已经开始学习NodeJs,并试图在我的项目中包含一个电子邮件function,这是我面临的同样的问题。