不支持的配置,将 Nodemailer 降级到 v0.7.1

Unsupported configuration, downgrade Nodemailer to v0.7.1

我在 Node 6.9.1 上使用 Nodemailer 2.6.4

var nodemailer = require("nodemailer");
var wellknown = require('nodemailer-wellknown');

var transporter = nodemailer.createTransport("SMTP",{
    service: "yahoo",  
    auth: {
        user: ",,,@yahoo.com",
        pass: ",,,,,,"
    }
});

transporter.sendMail({

            from        : sender_address, 
            to          : recipients,
            reply_to    : "<other_user@domain.it>", 
            subject     : "The subject",
            text        : "a text message"
       }, 
       function(error, response) {}
);

当 运行 时,我收到此错误:

Error: Unsupported configuration, downgrade Nodemailer to v0.7.1 to use it

我想学习使用最新的版本,需要修改什么?

删除第一个变量:

nodemailer.createTransport("SMTP",{

var transporter = nodemailer.createTransport({
    service: "yahoo",  
    auth: {
        user: ",,,@yahoo.com",
        pass: ",,,,,,"
    }
});

通过检查 node-mailer 第 273 行的源代码

https://github.com/nodemailer/nodemailer/blob/829ccf16eca3da686abf575eaaeea23736f85732/lib/nodemailer.js#L273

可以看到第一个变量不能是字符串

当我出错时,我在模块的源代码中搜索错误,然后我可以看到是什么触发了它。

在你的情况下,你可以看到有些人已经在问题中报告了它:

您当前的代码适用于旧版本的 Nodemailer,与更新的版本不兼容。给定的 example in the README 对于最新版本应该可以正常工作:

var nodemailer = require('nodemailer');

var smtpConfig = {
    host: 'smtp.mail.yahoo.com',
    port: 465,
    secure: true, 
    auth: {
        user: '...',
        pass: '...'
    }
};

var transporter = nodemailer.createTransport(smtpConfig);

var mailOptions = {
    from: '...', 
    to: '...',
    subject: '...', 
    text: '...', 
    html: '...' 
};

transporter.sendMail(mailOptions, function(error, info){
    if(error){
        return console.log(error);
    }
    console.log('Message sent: ' + info.response);
});

如您所见,createTransport 中的 'SMTP' 字符串不再需要。

我已经像您目前正在做的那样用 SMTP settings for Yahoo. You can also use nodemailer-wellknown 改编了示例,在这种情况下,将 smtpConfig 替换为:

var smtpConfig = {
    service: 'yahoo',
    auth: {
        user: '...',
        pass: '...'
    }
};