使用Nodemailer从本地主机发送电子邮件

时间:2015-08-28 06:48:58

标签: node.js nodemailer

我想在本地服务器上发送邮件,但似乎无法使用Nodemailer和NodeJS。

是否有任何解决方案可以从本地发送邮件?

    var contact = {subject: 'test', message: "test message", email: 'visitor@gmail.com'};
    var to = "myemail@gmail.com";
    var transporter = nodemailer.createTransport();
    transporter.sendMail({
      from: contact.email,
      to: to,
      subject: contact.subject,
      text: contact.message
    });

5 个答案:

答案 0 :(得分:2)

var nodemailer = require('nodemailer');

// Create a SMTP transport object
var transport = nodemailer.createTransport("SMTP", {
    service: 'Hotmail',
    auth: {
        user: "username",
        pass: "password"
    }
});

// Message object
var message = {

// sender info
from: 'name@hotmail.com',

// Comma separated list of recipients
to: req.query.to,

// Subject of the message
subject:req.query.subject, //'Nodemailer is unicode friendly ✔', 

// plaintext body
text: req.query.text //'Hello to myself!',

 // HTML body
  /*  html:'<p><b>Hello</b> to myself <img src="cid:note@node"/></p>'+
     '<p>Here\'s a nyan cat for you as an embedded attachment:<br/></p>'*/
};

console.log('Sending Mail');
transport.sendMail(message, function(error){
if(error){
  console.log('Error occured');
  console.log(error.message);
  return;
}
console.log('Message sent successfully!');

 // if you don't want to use this transport object anymore, uncomment    
 //transport.close(); // close the connection pool
});

您必须指定类似SMTP的传输协议或创建您自己的传输。您尚未在代码中指定此项。

答案 1 :(得分:0)

从本地服务器运行不应该是一个问题。

看起来您正在使用直接传输,在文档中将其描述为:

  

...不可靠,因为默认情况下通常会阻止使用的传出端口25。此外,从动态地址发送的邮件通常被标记为垃圾邮件。您应该考虑使用SMTP提供程序。

一种解决方案是定义SMTP传输:

var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'sender@gmail.com',
        pass: 'password'
    }
});

还有其他解决方案here,例如使用传输插件。

无论如何,当您没有向sendMail函数添加回调时,很难诊断出您的问题。当您发送邮件时,请执行此操作,然后您可以检查控制台以查看错误:

transporter.sendMail({
  from: contact.email,
  to: to,
  subject: contact.subject,
  text: contact.message
}, function(error, info){
    if(error){
        console.log(error);
    }else{
        console.log('Message sent: ' + info.response);
    }
});

答案 2 :(得分:0)

除了@cheniel所说的:确保&#34;来自&#34;电子邮件与运送者对象中的电子邮件是相同的用户电子邮件。 &#34;到&#34;必须是有效的电子邮件并存在(检查值是否正确设置(未定义且不为空))。

答案 3 :(得分:0)

  const transporter = nodemailer.createTransport({
    port: 25,
    host: 'localhost',
    tls: {
      rejectUnauthorized: false
    },
  });

  var message = {
    from: 'noreply@domain.com',
    to: 'whatever@otherdomain.com',
    subject: 'Confirm Email',
    text: 'Please confirm your email',
    html: '<p>Please confirm your email</p>'
  };

  transporter.sendMail(message, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message sent: %s', info.messageId);
  });

我目前正在通过express.js上的一个宁静的api触发此操作

这应该可行,我用它来在digitalocean上设置我的后缀:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-16-04

答案 4 :(得分:0)

在本地主机中,它不起作用,因为发送电子邮件需要安全的连接,但是使用gmail [smtp(简单邮件传输协议)],我们可以实现此功能。

别忘了先进行设置-Allow less secure apps to access account

已授予其访问Gmail帐户的权限。

默认情况下,此设置为关闭,而您只需将其打开。现在继续编码部分。

**************************** ------------------- ------------------------------------------------- * ********************

const nodemailer = require('nodemailer');

let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
secure: false,
requireTLS: true,
auth: {
    user: 'your.gmail.account@gmail.com', // like : abc@gmail.com
    pass: 'your.gmailpassword'           // like : pass@123
}
});

let mailOptions = {
 from: 'your.gmail.account@gmail.com',
 to: 'receivers.email@domain.com',
 subject: 'Check Mail',
 text: 'Its working node mailer'
};

transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
     return console.log(error.message);
  }
console.log('success');
});