1

我正在构建一个需要发送和接收电子邮件的应用程序。

但是我不想拥有单独的电子邮件服务器(或使用 IMAP 和 POP3),因为我需要即时创建/删除/管理收件箱,没有电子邮件收件箱密码等。

我有一个电子邮件存储数据库,我可以使用自定义 smtpd 服务器接收电子邮件,替换 postfix。但是,这样我就无法通过 postfix 发送电子邮件(使用 smtplib,通过端口 25 连接到 postfix 并发送电子邮件)

这个问题有什么解决办法吗?如何使用自定义 smtp 服务器发送电子邮件?我可以将 postfix 配置为将所有传入的电子邮件中继到在另一个端口上运行的自定义 smtp 服务器,并且仍然使用端口 25 上的 postfix 发送电子邮件吗?

谢谢你的时间

4

1 回答 1

3

通过使用自定义 SMTP 服务器,您会冒着无意中创建安全漏洞或以某种方式违反 SMTP 协议的风险。有这么多出色的 SMTP 服务器(Postfix、exim、sendmail...),这对我来说听起来不是一个好选择。

我能想到的解决该问题的最简单方法是使用 Postfix 中继入站和出站电子邮件。入站电子邮件可以配置为通过管道传送到应用程序,出站电子邮件可以配置为由 Postfix 直接传递或通过不同的服务器中继。

这样,您可以使用能够解析符合 RFC822 的消息文件的应用程序,而不是自定义 SMTP 服务器。这比做完全相同的事情要好,但需要实现 SMTP 协议的开销。

如果您需要接收大量消息,这种方法可能无法很好地扩展 - 每条消息都会分叉+执行一个新进程。如果这是一个要求,一个好的方法是保留一个自定义 SMTP 服务器来完成这项工作,但让 Postfix 将消息中继给它 - 然后您将在解析器之前从 Postfix 的体系结构中受益。

假设您遵循将消息传递到应用程序的方法,您在 Postfix 中需要做的就是

  1. 配置 Postfix 的alias_maps' 参数以查找这样的映射:

    alias_maps = hash:/etc/aliases, hash:/etc/postfix/app-aliases
    
  2. 然后,配置映射以将发送到每个地址的消息通过管道传输到应用程序中:

    test:         "|/usr/local/bin/your-app"
    
  3. 像往常一样,别忘了$ postalias app-aliases

这将使发送的消息test@yourdomain通过管道传输到/usr/local/bin/your-app,它充当您应用程序的电子邮件网关。

于 2014-03-15T22:25:32.230 回答