通过使用自定义 SMTP 服务器,您会冒着无意中创建安全漏洞或以某种方式违反 SMTP 协议的风险。有这么多出色的 SMTP 服务器(Postfix、exim、sendmail...),这对我来说听起来不是一个好选择。
我能想到的解决该问题的最简单方法是使用 Postfix 中继入站和出站电子邮件。入站电子邮件可以配置为通过管道传送到应用程序,出站电子邮件可以配置为由 Postfix 直接传递或通过不同的服务器中继。
这样,您可以使用能够解析符合 RFC822 的消息文件的应用程序,而不是自定义 SMTP 服务器。这比做完全相同的事情要好,但需要实现 SMTP 协议的开销。
如果您需要接收大量消息,这种方法可能无法很好地扩展 - 每条消息都会分叉+执行一个新进程。如果这是一个要求,一个好的方法是保留一个自定义 SMTP 服务器来完成这项工作,但让 Postfix 将消息中继给它 - 然后您将在解析器之前从 Postfix 的体系结构中受益。
假设您遵循将消息传递到应用程序的方法,您在 Postfix 中需要做的就是
配置 Postfix 的alias_maps
' 参数以查找这样的映射:
alias_maps = hash:/etc/aliases, hash:/etc/postfix/app-aliases
然后,配置映射以将发送到每个地址的消息通过管道传输到应用程序中:
test: "|/usr/local/bin/your-app"
像往常一样,别忘了$ postalias app-aliases
。
这将使发送的消息test@yourdomain
通过管道传输到/usr/local/bin/your-app
,它充当您应用程序的电子邮件网关。