node.js nodemailer smtpTransport causes TypeError: this.mailcomposer.setMessageOption is not a function

node.js nodemailer smtpTransport causes TypeError: this.mailcomposer.setMessageOption is not a function

我正在尝试使用 nodemailer 通过 gmail 帐户发送电子邮件。我看了很多地方,似乎语法正确,但无论我使用什么示例,我都会收到类型错误。所以这是我正在使用的代码:

    var nodemailer = require('nodemailer');

    var transporter = nodemailer.createTransport("SMTP",{
        service: 'gmail',
        auth: {
        user: 'user@gmail.com',
        pass: 'pass'
    }
    }, {
    // default values for sendMail method
     from: 'sender@gmail.com',
     headers: {
      'My-Awesome-Header': '123'
    }
    });
    transporter.sendMail({
        to: 'lucky@gmail.com',
        subject: 'hello',
        text: 'hello world!'
    });

这最终给我以下错误:

    C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:241
    this.mailcomposer.setMessageOption(mailOptions);
                  ^

    TypeError: this.mailcomposer.setMessageOption is not a function
        at Nodemailer.setGeneralOptions (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:241:23)
        at Nodemailer.generateMailObject (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:196:10)
        at Nodemailer.sendMail (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:184:10)
        at C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:69:20
        at Nodemailer.validateSettings (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:173:5)
        at sendMail (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:63:12)
        at Transport.transport.sendMail (C:\Program Files\nodejs\node_modules\nodemailer\lib\nodemailer.js:40:9)
        at Object.<anonymous> (C:\Program Files\nodejs\hooks_examples\in testing\test2.js:17:13)
        at Module._compile (module.js:435:26)
        at Object.Module._extensions..js (module.js:442:10)

如有任何想法,我们将不胜感激...我是 node.js 的新手,但不是编程人员。

你读过官方文档了吗here? 它指出:

var nodemailer = require('nodemailer');

// create reusable transporter object using SMTP transport
var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: 'gmail.user@gmail.com',
        pass: 'userpass'
    }
});

// NB! No need to recreate the transporter object. You can use
// the same transporter object for all e-mails

您不需要在以下位置指定 "SMTP" 部分:

var transporter = nodemailer.createTransport("SMTP",{
        service: 'gmail',
        auth: {
        user: 'user@gmail.com',
        pass: 'pass'
    }

因为它是 nodemailer 的默认设置。 此外,请阅读 SMTP 传输的 README 选项。

我似乎通过尝试更多的东西偶然发现了一个修复程序。我在一台新机器上安装了 nodejs,然后将 js 文件加载到不同的目录,测试电子邮件没有问题。第一次安装的不同之处在于我加载到 C:\Program Files\nodejs\test 目录中的测试文件。我猜 nodejs 不喜欢那样。当我将同一个文件移动到 C:\test\test.js 时,问题就消失了。经验教训不要将文件放在 nodejs 目录中,运行 它们来自另一个位置。

对于自定义 SMTP,试试这个...

var transporter = nodemailer.createTransport({
                                    host: 'mail.server.in',
                                    port: 587,
                                    auth: {
                                        user: 'automail@server.in',
                                        pass: 'password'
                                    },            
                                    authMethod:'NTLM',
                                    secure:false,
                                    tls: {rejectUnauthorized: false},
                                    debug:true
                                });

Node.js 无法验证您的 SMTP 服务器的证书。您可以使用 rejectUnauthorized: false 选项跳过证书验证

Unable to send email from custom smtp server