如何通过直接方法使用nodemailer(node.js)发送邮件?

时间:2016-05-18 15:51:32

标签: node.js smtp nodemailer

我尝试编写简单的邮件程序,只是为了使用nodemailer发送一些文本(用于测试目的)。如果我理解得很好,可以通过smtp或直接发送邮件。起初我想用DIRECT方法发送。

下一个代码非常简单:

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({direct:true,
    host: 'smtp.yandex.ru',
    port: 465,
    auth: { 
        user: 'login@yandex.ru', 
        pass: 'password' },
    secure: true
});

var mailOptions = {
    from: 'nworksheet@gmail.com',
    to: 'sky-bell@mail.ru',
    subject: 'Hello',
    text: 'This is auto mail sending'
};

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

但我有下一个错误:

{ Error: Sending failed
at QueryReqWrap.asyncCallback [as callback] (dns.js:65:16)
at QueryReqWrap.onresolve [as oncomplete] (dns.js:216:10)
  errors: 
   [ { Error: queryMx ENOTFOUND mail.ru
     at errnoException (dns.js:28:10)
     at QueryReqWrap.onresolve [as oncomplete] (dns.js:216:19)
   code: 'ENOTFOUND',
   errno: 'ENOTFOUND',
   syscall: 'queryMx',
   hostname: 'mail.ru' } ] }

这是什么意思?怎么解决?节点看不到'mail.ru'?为什么呢?

2 个答案:

答案 0 :(得分:0)

看起来它无法找到mail.ru的MX记录。但它似乎存在。 https://toolbox.googleapps.com/apps/dig/#MX/mail.ru

这台机器是否正确设置了DNS?你能从那台机器上挖出来吗?

答案 1 :(得分:0)

实现这一目标的最佳方法是

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
    service: 'Yandex',
    auth: { 
        user: 'your_yandex_email', 
        pass: 'your_password_for_email' },
});

var mailOptions = {
    from: 'your_yandex_email',
    to: 'sky-bell@mail.ru',
    subject: 'Hello',
    text: 'This is auto mail sending'
};

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

每当您指定 service 命令时,它都会自动设置端口并保护电子邮件。 还要记住从配置文件中放入和获取凭据。