Node.js SMTP服务器:电子邮件已发送但未收到。

3
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);
    }
});

输出结果为: That was easy! 邮件发送成功:250 OK: message queued
我想要使用我的域名发送一封包含输入变量文本的电子邮件到一个普通的Gmail地址; 但是这封邮件无法被接收到Gmail或任何其他地址;已经检查了垃圾邮件文件夹;
3个回答

5

如果使用Nodemailer的transporter方法遇到同样的问题,可以将服务器的name添加到transporter对象中以解决此问题。


    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(...)

这个解决方案是在这里提到的。


2
我认为你可能只是在你的smtp-server实例中排队电子邮件,而不是实际发送它。关于smtp-server文档以一条备注开头,说明此模块本身并不会发送电子邮件:
“此模块本身不会进行任何电子邮件投递。 smtp-server 允许您使用 SMTP 或 LMTP 协议侦听端口 25/24/465/587 等。您自己的应用程序负责接受和将消息传递到目标。”
您需要与SMTP服务器一起使用SMTP客户端模块smtp-connection来发送电子邮件。
你可以在服务器模块代码的这一行看到“250 OK: message queued”响应来自哪里。

-1

我的要求是不使用第三方电子邮件提供商来发送和接收已知客户的电子邮件。创建一个名为 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,rDNS(反向DNS)配置可以通过将SMTP服务器选项上的横幅设置为您的公共主机名来解决,该名称可以在https://www.whoismyisp.org/中确定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接