我正在使用我的gmail帐户向用户电子邮件发送SMTP警报消息。例如,注册或封锁帐户等。我正在使用NodeMailer,并通过电子邮件发送了电子邮件,而没有单个失败。以下是我的代码。
var nodemailer = require("nodemailer");
// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "gmail.user@gmail.com",
pass: "userpass"
}
});
// setup e-mail data with unicode symbols
var mailOptions = {
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
}
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
}else{
console.log("Message sent: " + response.message);
}
// if you don't want to use this transport object anymore, uncomment following line
//smtpTransport.close(); // shut down the connection pool, no more messages
});
就在昨天,注册Google的商务帐户到我的@MyDomain帐户,然后用我的新Google替换Gmail for Business Email
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "user@mydomain.com",
pass: "userpass"
}
});
问题是,它不会发送带有新帐户的电子邮件。它宁愿返回了我的控制台上的标题错误。我尝试更改新帐户的安全性,以允许Google控制台的安全应用程序较低,但无济于事。请这个错误意味着什么?还考虑使用我的电子邮件的用户名和PWD,这是最好的选择吗?请最佳实现?任何帮助将不胜感激。
谢谢你的时间。以下是对我有用的。
nodemailer.createTransport('smtps://user%myDomain.com:pass@smtp.gmail.com');
更改为
var smtpConfig = {
host: 'smtp.gmail.com',
port: 465,
secure: true, // use SSL
auth: {
user: 'user@myDomain.com',
pass: 'pass@pass'
}
};
var transporter = nodemailer.createTransport(smtpConfig);
我在Doc https://github.com/nodemailer/nodemailer上找到了上面的示例。我怀疑如果您的密码包含U和SMTPS链接的@
符号,您可能会发生这种情况。因此,建议不要将其分为一个对象而不会 @符号干扰您的SMTPS URL。这是我的想法。但是,上述解决方案对我有用。另外,不要忘记允许您的Google控制台更少安全的应用程序。
为使用它的任何人添加Bluehost的配置。
let transporter = nodemailer.createTransport({
host: 'box1109.bluehost.com',
port: 465,
secure: true,
auth: {
user: 'someusername@somewebsite.com',
pass: 'yourpassword'
}
});
您可以使用verify()
方法验证选项。
transporter.verify((err, success) => {
if (err) console.error(err);
console.log('Your config is correct');
});
如果您遇到此错误,请确保将主机属性设置得正确。
console.log(transporter.options.host);
我花了20分钟在此错误上,以发现主机属性未定义(我使用的环境变量将其移植到配置中)。
我正在使用 secure: false
,我在生产上遇到了同样的问题,以下是对我有用的解决方案:
const transporter = nodemailer.createTransport({
host: <hostname>,
port: 25,
secure: false,
logger: true,
debug: true,
ignoreTLS: true // add this
});
希望这对某人有帮助。
我遇到了相同的错误,这对我有用
try {
var transporter = nodemailer.createTransport({
service: 'gmail',
port:465,
secure: true, // true for 465, false for other ports
logger: true,
debug: true,
secureConnection: false,
auth: {
user: 'test@gmail.com', // generated ethereal user
pass: '*****', // generated ethereal password
},
tls:{
rejectUnAuthorized:true
}
})
var info = await transporter.sendMail({
from: 'myuser@outlook.com', // sender address
to: 'anotheruser@hotmail.co.uk', // list of receivers
subject: 'Test Email', // Subject line
text: 'Hello world ?' // plain text body
html: output, // html body
});
}
catch(error) {
console.log(error)
}
我以这种方式解决了这个问题。
const nodemailer = require("nodemailer");
const sendEmail = async(mailOptions) => {
let transporter = nodemailer.createTransport({
service: 'gmail',
port:465,
secure: true,
secureConnection: false,
auth: {
user: 'your mail address',
pass: 'your mail address password',
},
tls:{
rejectUnAuthorized:true
}
});
let info = await transporter.sendMail(mailOptions);
console.log(`Message Sent: ${info.messageId}`);
}
在我的情况下,代理是错误,因此请参阅代理的告别设置
如果没有其他作用,则可能是因为您的服务器提供商没有为您启用端口465。我正在使用A2托管,默认情况下,它们不是启用端口465,在与技术支持交谈后,我只能通过使用Google Workspace电子邮件发送电子邮件。