此运行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输出正常且安全。由于这个问题,我无法安全地接收电子邮件。
顺便说一句,我正在使用iptables
从25重定向到8025的端口监听8025,而我只是通过我的Gmail帐户发送。
这是怎么回事?我在做错什么吗?
答案 0 :(得分:1)
顺便说一句,我正在监听8025端口,其iptables从25重定向到8025,而我只是通过我的Gmail帐户发送。
由于您使用的是secure: true
,因此您将强制进行TLS加密。为此,您必须在服务器的端口 465 和 NOT 25上接受连接。
您可以在端口25上设置secure: false
,它仍允许通过STARTTLS 加密。
但是,为了获得最大的兼容性,您应该启动两个smtp-server实例-一个实例使用secure: false
监听端口25,另一个实例使用secure: true
监听端口465。
编辑:
我刚刚进行了一些测试,我可以确认只是从脚本中删除secure: true
就可以了。
您可以通过https://www.checktls.com/TestReceiver进行测试,它将检查连接,TLS升级,您的证书以及其他所有内容。
这是我在删除secure: true
的情况下使用您的脚本的结果:
https://gyazo.com/05a34942d2cc4a2d633e830258b90f88
如您所见,将连接升级到TLS很好,一切顺利。这是在端口25上。