使用Gmail服务的Nodemailer无法在heroku上运行

ski*_*kip 8 email heroku node.js angularjs nodemailer

我已经完成了使用Nodemailer和AngularJS以及NodeJS发送电子邮件的基本电子邮件设置,我已经在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);
        }
    });        
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*Yan 9

我相信这是谷歌帐户安全的问题. - 由于设备未知(位置),Google阻止您登录使用邮件功能.

验证这一步的几步:

  • 在本地启动服务器并发送电子邮件.

  • 检查您的帐户提醒未知登录.

这可以通过以下方式暂时解决:https: //accounts.google.com/DisplayUnlockCaptcha

更永久的解决方案是将密码更改为更强的级别:

大写字母+小写字母+特殊符号+数字


小智 9

而不是使用像这样的直接 gmail 凭据

auth: {
    user: 'foobar@gmail.com',
    pass: 'foobar'
}
Run Code Online (Sandbox Code Playgroud)

使用OAuth2

 auth: {
    type: 'OAuth2',
    user: 'user@example.com',
    accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x'
}
Run Code Online (Sandbox Code Playgroud)

如果我们使用上面提到的直接凭据,Google 会阻止 heroku IP(不安全)。你可以参考这篇 Medium 文章在此处


小智 0

尝试更新nodemailer包(使用“npm update nodemailer”命令)

\n\n
var transporter = nodemailer.createTransport({\n    host: \'smtp.gmail.com\',\n    port: 465,\n    secure: true,\n    auth: {\n        user: \'youremai@gmail.com\', // Your email id\n        pass: \'pwd123\' // Your password\n    },\n    tls: {\n        // do not fail on invalid certs\n        rejectUnauthorized: false\n    }\n});\nrouter.post(\'/send\',function(req,res){\n\n    var mailOptions = {\n        from: \'Foo Bar \xe2\x9c\x94 <foobar@gmail.com>\',\n        to: req.body.email,\n        subject: "Hello " + req.body.email,\n        text: \'Hello \' + req.body.email + \'\xe2\x9c\x94\',\n        html: "<p>Hello " + req.body.email + " </p>",\n        bcc: "fred@gmail.com"\n    };\n    transporter.sendMail(mailOptions, function(error, info){\n        if(error){\n            console.log(error);\n        }else{\n            console.log(\'Message sent: \' + info.response);\n            res.send(200);\n        }\n    });        \n});\n
Run Code Online (Sandbox Code Playgroud)\n