我正在尝试通过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上。
修改 这似乎是与Linux相关的Windows相关错误
编辑#2
在git shell上,如果我输入telnet smtp.gmail 587
,则会在此处阻止:
220 mx.google.com ESMTP f7...y.24 -gsmtp
答案 0 :(得分:13)
从您的示例输出似乎连接到错误的端口25,打开的gmail smtp端口是465用于SSL,另一个是587 TLS。
Nodemailer会根据电子邮件域检测到正确的配置,在您的示例中,您尚未设置传输器对象,因此它使用配置的默认端口25。要更改端口,请在选项中指定类型。
以下是应该使用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\'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
});
答案 1 :(得分:8)
使用nodemailer 0.7.1。
如果您之前安装了nodemailer,则按
npm remove nodemailer
现在按
安装npm install nodemailer@0.7.1
以下代码在没有登录的情况下发送邮件,但它只能在生产环境中工作,它不能在本地工作
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
});
答案 2 :(得分:6)
看起来当前的nodemailer
无法选择不再使用smtp发送邮件。我建议看看sendmail库 NOT 需要任何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
以减少冗长:const sendmail = require('sendmail')({silent: true});
。需要注意的一点是,发件人不能是那些DMARC
policy xxx@capitalone.com
的域名。
答案 3 :(得分:4)
可能是Windows防火墙或防病毒软件阻止了传出访问。 尝试启用nodemailer调试消息。
启用调试
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);
答案 4 :(得分:0)
您需要拥有一个SMTP服务器,一个代表您转发电子邮件的电子邮件服务器。因此,要么像Haraka那样设置自己的SMTP服务器,要么向Nodemailer提供凭据以连接到一个例如Haraka。的Gmail,MSN,雅虎。即使我已经开始学习NodeJ并试图在我的项目中包含一个电子邮件功能,这也是我面临的同样问题。
答案 5 :(得分:0)
当您进行设置时,它允许发送邮件。 https://www.google.com/settings/security/lesssecureapps 这个对我有用
答案 6 :(得分:0)
这似乎在nodemailer中是可能的。不知道提供其他答案时是否还没有解决。如此处所述:https://nodemailer.com/transports/sendmail/ 您可以使用内置的sendmail(如果可用)进行发送。我已经对此进行了测试,可以正常使用。 SMTP显然具有优势,但是说不可能是不正确的。