4

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

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始终是一个字符串。

有什么问题?

4

3 回答 3

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 封电子邮件是免费的!

于 2014-08-20T07:26:34.680 回答
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'
 });
于 2014-08-21T11:07:40.383 回答
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
    }
}));

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

于 2014-08-21T00:05:44.610 回答