运行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 上。