在Heroku上使用nodemailer发送电子邮件失败

时间:2014-08-07 15:28:54

标签: node.js heroku nodemailer

在我的node.js-App中运行1个Heroku工作者,需要不时发送电子邮件。逻辑如下:

var transporter = Email.createTransport({
    service: 'yahoo',
    auth: {
        user: process.env.CRAWLER_MAIL,
        pass: process.env.CRAWLER_PWD
    }
});
transporter.sendMail({
                            from: process.env.CRAWLER_MAIL,
                            to: process.env.CRAWLER_RCVR_MAIL,
                            subject: 'subject',
                            text: 'text'
                        }, function(err, result) {
                            if (err !== null) {
                                console.log(err);
                            } else {
                                ...
                            }
                        });

我用foreman start对此进行了测试,效果很好。尽管如此,一旦部署到Heroku,传输器总是会发出错误状态代码' 564:我们无法传递您的消息。请尝试添加一些文字重新发送消息。'

process.env.保持正确的值,我检查了一下,text始终是一个字符串。

可能有什么不对?

3 个答案:

答案 0 :(得分:3)

我无法使用我的帐户详细信息复制您的问题。

是否与发件人/收件人电子邮件有关?它们都是@ yahoo.com地址吗? 在论坛上有一些关于雅虎团体电子邮件的喋喋不休,特别是不能正常工作并发出错误。与雅虎近期更改DMARC政策有关。

Nodemailer从子模块nodemailer-wellknown

加载预定义的“众所周知的”服务

这是在service: 'yahoo'中使用createTransport()时加载的当前定义: https://github.com/andris9/nodemailer-wellknown/blob/master/services.json#L160

值得一试:

  • 将smtp服务器切换为plus.smtp.mail.yahoo.com
  • 尝试使用和不使用@yahoo.com
  • 的用户名
  • 确保您从真实的电子邮件地址发送 - 而不是别名。

我们使用我们的Nodemailer应用程序在Heroku上使用Mandrill作为SMTP。

非常可靠,每月发送的前12k封电子邮件是免费的!

答案 1 :(得分:0)

您是否可以尝试在没有服务选项的情况下使用它并手动指定SMTP服务器,如下所示。

var transporter = Email.createTransport(smtpTransport({
    host: 'smtp.mail.yahoo.com',
    port: 465,
    auth: {
        user: process.env.CRAWLER_MAIL,
        pass: process.env.CRAWLER_PWD
    }
}));

前段时间我遇到过这个问题,当我绕过服务时解决了这个问题

答案 2 :(得分:0)

试试这段代码:

我知道它看起来一样,但有一些小的变化可能会解决你的问题。尝试一下,因为它在工头开始时运行良好,如果有任何好处,请告诉我......

var nodemailer = require('nodemailer');
var transporter = Email.createTransport({
service: 'yahoo',
auth: {
    user: 'process.env.CRAWLER_MAIL',
    pass: 'process.env.CRAWLER_PWD'
}
});
transporter.sendMail({
from: 'process.env.CRAWLER_MAIL',
to: 'process.env.CRAWLER_RCVR_MAIL',
subject: 'subject',
text: 'text'
 });