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,这是我面临的同样的问题。
当你在你的设置,它允许发送邮件。 https://www.google.com/settings/security/lesssecureapps这一个为我工作