[英]Nodemailer with Gmail service not working on heroku
我已经完成了基本的电子邮件设置,用于使用带有 AngularJS 和 NodeJS 的 Nodemailer 发送电子邮件,并且我已经将项目部署在 heroku 上。
当我在 heroku 上运行应用程序时,电子邮件似乎工作得很好,但是当我将它部署到 Heroku 时,没有发送电子邮件。
对于身份验证,我使用的是 Gmail 地址,并且我还有一个bcc
到另一个 Gmail 地址。 所以from
和bcc
地址是两个不同的 Gmail 地址。 发件人地址与用于身份验证from
地址相同。
有人可以帮我解决这个问题吗?
编辑:添加代码
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'foobar@gmail.com',
pass: 'foobar'
}
});
router.post('/send',function(req,res){
var mailOptions = {
from: 'Foo Bar ✔ <foobar@gmail.com>',
to: req.body.email,
subject: "Hello " + req.body.email,
text: 'Hello ' + req.body.email + '✔',
html: "<p>Hello " + req.body.email + " </p>",
bcc: "fred@gmail.com"
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error);
}else{
console.log('Message sent: ' + info.response);
res.send(200);
}
});
});
我相信这是谷歌账户安全的问题。
验证这一点的几个步骤:
在本地启动您的服务器并发送电子邮件。
检查您的帐户警报以了解未知登录。
这可以通过以下方式暂时解决: https ://accounts.google.com/DisplayUnlockCaptcha
更永久的解决方案是将您的密码更改为更高级别:
大写字母 + 小写字母 + 特殊符号 + 数字
5 年后,我仍然在为这个问题苦苦挣扎(在我的案例中,在 SO 上找到的所有答案都失败了)。 这是我所做的,现在一切正常:
像这样配置 NodeMailer:
const nodemailer = require('nodemailer'), sgTransport = require('nodemailer-sendgrid-transport'); const mailTransporter = nodemailer.createTransport(sgTransport({ auth: { api_key: process.env.ADMIN_EMAIL_API_KEY // your api key here, better hide it in env vars } }))
要立即发送电子邮件,您必须在“回复”字段中添加您的 gmail,如下所示:
mailTransporter.sendMail({ from: `"Admin" <any_address@heroku.com>`, to: 'receiver@hotmail.com', replyTo: 'your_gmail@gmail.com', subject: 'Something', html: `Boom !` });
我想就是这样,如果我忘记了什么,请在下面添加评论
尝试更新 nodemailer 包(使用“npm update nodemailer”命令)
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: 'youremai@gmail.com', // Your email id
pass: 'pwd123' // Your password
},
tls: {
// do not fail on invalid certs
rejectUnauthorized: false
}
});
router.post('/send',function(req,res){
var mailOptions = {
from: 'Foo Bar ✔ <foobar@gmail.com>',
to: req.body.email,
subject: "Hello " + req.body.email,
text: 'Hello ' + req.body.email + '✔',
html: "<p>Hello " + req.body.email + " </p>",
bcc: "fred@gmail.com"
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error);
}else{
console.log('Message sent: ' + info.response);
res.send(200);
}
});
});
我知道我为时已晚,但希望有人会发现它有帮助。
在撰写本文时,谷歌不再支持不太安全的应用程序。 而且您不能使用您的谷歌帐户密码。
您将不得不生成一个新的应用密码。
它适用于本地机器和 Heroku。
const client = nodemailer.createTransport({
service: "Gmail",
auth: {
user: "username@gmail.com",
pass: "Google-App-Password-Without-Spaces"
}
});
client.sendMail(
{
from: "sender",
to: "recipient",
subject: "Sending it from Heroku",
text: "Hey, I'm being sent from the cloud"
}
)
应用密码仅在开启两步验证的情况下才有效。 你可以在这里这样做
此外,如果您的应用程序密码在您的.env
文件中,您必须将其添加到 heroku 应用程序设置选项卡中的配置vars
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.