节点"smtp-server"模块不适用于TLS



运行SMTP服务器的最小代码工作正常。当我向服务器发送电子邮件时,所有内容(由于logger选项(都会按预期记录,并收到电子邮件数据。

const {SMTPServer} = require("smtp-server");
const {simpleParser} = require("mailparser");
const server = new SMTPServer({
authOptional: true,
onData: async (stream, session, callback) => {
const parsed = await simpleParser(stream);
callback();
console.log(parsed);
},
logger: true
});
server.listen(8025);

但是,当我启用 TLS 选项时,向我的服务器发送电子邮件不再记录任何内容。根据日志,我什至没有收到连接。

const fs = require("fs");
const {SMTPServer} = require("smtp-server");
const {simpleParser} = require("mailparser");
const server = new SMTPServer({
secure: true,
authOptional: true,
onData: async (stream, session, callback) => {
const parsed = await simpleParser(stream);
callback();
console.log(parsed);
},
key: fs.readFileSync("privkey.pem"),
cert: fs.readFileSync("cert.pem"),
ca: fs.readFileSync("chain.pem"),
logger: true
});
server.listen(8025);

我认为证书文件是正确的,因为我将它们用于同一域上的 Web 服务器和 Postfix 配置,并且 HTTP/SMTP-out 工作正常且安全。由于此问题,我无法安全地接收电子邮件。

顺便说一句,我正在收听端口 8025,从 25 到 8025 的iptables重定向,我只是通过我的 Gmail 帐户发送。

这是怎么回事?我做错了什么吗?

顺便说一下,我正在收听端口 8025,iptables 从 25 重定向到 8025,我只是通过我的 Gmail 帐户发送。

因为您使用的是secure: true,所以您正在强制TLS 加密。为此,您必须接受端口465 而不是 25上的服务器连接

您可以在端口 25 上设置secure: false这仍然允许通过 STARTTLS 进行加密

但是,为了获得最大的兼容性,您应该启动两个 smtp-server 实例 - 一个使用secure: false侦听端口 25,另一个侦听端口 465secure: true

编辑:

我刚刚做了一些测试,我可以确认简单地从您的脚本中删除secure: true就可以了。

您可以通过 https://www.checktls.com/TestReceiver 对此进行测试,这将检查连接,TLS升级,证书以及其他所有内容。

以下是我使用您的脚本并删除secure: true的结果:

https://gyazo.com/05a34942d2cc4a2d633e830258b90f88

如您所见,连接已升级到TLS,一切顺利。这是在端口 25 上。

最新更新