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

ton*_*227 8 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
    });
Run Code Online (Sandbox Code Playgroud)

suc*_*ool 11

  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);
  });
Run Code Online (Sandbox Code Playgroud)

我目前正在通过 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

  • 无论 2019 年发生了什么,2022 年对我来说都不起作用了!我刚刚尝试了一个注册确认电子邮件并得到了回复 *Error: connect ECONNREFUSED 127.0.0.1:25 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -111, code: 'ESOCKET ',系统调用:'连接',地址:'127.0.0.1',端口:25,命令:'CONN'}* (2认同)

che*_*iel -6

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

看起来您正在使用直接传输,文档中对此进行了描述:

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

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

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

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

无论如何,当您不向 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 它也不起作用..`{[错误:未定义收件人]代码:'EENVELOPE'}` (2认同)