node.js nodemailer smtpTransport导致TypeError:this.mailcomposer.setMessageOption不是函数

时间:2015-11-18 23:54:44

标签: node.js nodemailer

我正在尝试使用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的新手但不是编程。

3 个答案:

答案 0 :(得分:1)

您是否阅读过官方文档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以获取选项。

答案 1 :(得分:0)

我似乎通过尝试更多的东西偶然发现了一个问题。我在一台新机器上安装了nodejs,然后将js文件加载到另一个目录,测试电子邮件解决了问题。第一次安装的不同之处是我加载到C:\ Program Files \ nodejs \ test目录中的测试文件。我想nodejs并不喜欢这样。当我将同一个文件移动到C:\ test \ test.js时,问题就消失了。获得的经验教训不要将文件放在nodejs目录中,而是从其他位置运行它们。

答案 2 :(得分:0)

对于自定义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