【问题标题】:nodejs smtp-server Email gets sent but not receivednodejs smtp-server 电子邮件已发送但未收到
【发布时间】:2019-07-16 21:52:58
【问题描述】:
const nodemailer = require('nodemailer');

const SMTPServer = require("smtp-server").SMTPServer;

const server = new SMTPServer({
    onAuth(auth, session, callback) {
        if (auth.username !== "test" || auth.password !== "password") {
            return callback(new Error("Invalid username or password"));
        }
        console.log(mailOptions.text);
        callback(null, {
            user: "test"

        }); // where 123 is the user id or similar property
    }
});

server.on("error", err => {
    console.log("Error %s", err.message);
});

server.listen(26);


var transporter = nodemailer.createTransport({
    host: "MYDOMAINNAME/IP",
    port: 26,
    secure: false,
    auth: {
        user: "test",
        pass: "password"
    },
    tls: {
        rejectUnauthorized: false
    }
});

var mailOptions = {
    from: '"MYSITENAME"<info@MYDOMAIN.com>',
    to: 'ADRESS@TLD.com',
    subject: 'Sending Email using Node.js',
    text: 'That was easy!'
};

transporter.sendMail(mailOptions, function (error, info) {
    if (error) {
        console.log("sendmail" + error);
    } else {
        console.log('Email sent: ' + info.response);
    }
});

输出是: 那很简单! 已发送电子邮件:250 OK:消息已排队

我只想将带有输入变量的邮件作为文本从我的域名发送到普通的 gmail 地址; gmail/ 或任何其他地址没有收到邮件;检查垃圾邮件文件夹;

【问题讨论】:

    标签: node.js smtp nodemailer


    【解决方案1】:

    我认为您可能只是在您的 smtp-server 实例中排队电子邮件,而不是实际发送它。

    documentation for smtp-server 开头说明了此模块实际上如何不自行发送电子邮件:

    此模块本身不会发送任何电子邮件。 smtp-server 允许您使用 SMTP 或 LMTP 协议监听端口 25/24/465/587 等,仅此而已。您自己的应用程序负责接受消息并将其传递到目的地。

    您需要将SMTP client module smtp-connection 与您的 SMTP 服务器结合使用来发送电子邮件。

    您可以在服务器模块代码中的this line 处查看“250 OK:消息队列”响应来自何处。

    【讨论】:

      【解决方案2】:

      对于遇到同样问题但使用 Nodemailer 的 transporter 方式的人,我解决了这个问题,将服务器的 name 添加到传输器对象中。

      
          const transportObj = {
            name: credentials.host, // in my case, the host and the name are the same
            host: credentials.host,
            port: credentials.port,
            secure: true,
            auth: {
                user: credentials.user,
                pass: credentials.pass
            },
      }
      
      const transporter = nodemailer.createTransport(transportObj)
      
      transporter.sendMail(...)
      
      

      这个解决方案是相关的here

      【讨论】:

        【解决方案3】:

        我的要求是不要使用第三方电子邮件提供商来发送和接收来自已知客户的电子邮件。创建一个名为 send 的 node-express 路由,

        var express = require('express');
        var server = express();
        
        server.use(express.json());
        server.use(express.urlencoded());
        server.use(cookieParser());
        
        server.post('/send', function(req, res){
            try {
                var message = {
                    from: '<' + req.body.from + '>',
                    to: '<' + req.body.to + '>',
                    subject: req.body.subject,
                    text: req.body.message,
                    html: req.body.html
                };
        
                var email = req.body.to;
        
                const dns = require('dns');
                const domain = email.split('@')[1]; 
                // lookup for any MX domains for the recipient?
                dns.resolve(domain, 'MX', function(err, addresses) {
                    if (err) {
                        res.on({status: 'error', message: 'No MX record exists, so email is invalid.'});
                    } else if (addresses && addresses.length > 0) {      
                        // use the first MX domain in the list
                        const toExchange = addresses[0].exchange;
        
                        const nodemailer = require('nodemailer');
                        const transporter = nodemailer.createTransport({
                            port: 25,
                            host: toExchange,
                            logger: true,
                            debug: true,
                        });
        
                       
                        transporter.sendMail(message, function(err, info){
                            if (err) {
                                res.json({status: 'error', message: err});
                            } else {
                                res.json({status: 'success', info: info});
                            }
                        });
                    }
                });
            } catch(error) {
                res.json({status: 'error', message: error});
            }
        });
        

        要接受传入的电子邮件,请使用 node-mailin。您需要为接收邮件服务器配置 DNS。一个不错的 YouTube 视频在 https://www.youtube.com/watch?v=o66UFsodUYo,可以通过将 SMTP 服务器选项上的横幅设置为您的公共主机名来解析 rDNS(反向 DNS)配置,可以在 https://www.whoismyisp.org/ 进行标识

        【讨论】:

          猜你喜欢
          • 2015-10-15
          • 2022-10-22
          • 2015-06-13
          • 2014-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-12
          相关资源
          最近更新 更多