我有一个 Postfix SMTP 服务器,它从 Web 服务发送事务性电子邮件。这些邮件使用 VERP 作为返回路径,因此退回邮件会返回到如下地址:
[email protected]
运行的这个 postfix 服务器e.mydomain.com
专门用于发送电子邮件,没有本地邮箱、POP 或 IMAP 访问等。只有本地网络上的系统才能通过它中继邮件。
然后,我有一个单独的自定义 SMTP 应用程序,它只处理在同一台服务器 (e.mydomain.com) 上运行的退回邮件,但在不同的端口 (8025) 上运行。它会丢弃任何未发送到格式正确的退回地址的邮件。具有格式正确的退回地址的电子邮件将被接受。
当退回邮件被接受时,此自定义应用程序会根据退回邮件地址在数据库中查找正确的用户,并增加退回邮件计数器。主 Web 服务将仅向退回邮件数不超过阈值的用户发送事务性电子邮件。
我的问题是:
设置我的退回处理 SMTP(bounces.mydomain.com)服务器以直接处理退回(并在端口 25 上运行)是否更好?还是最好让所有退回都转到我的 postfix 服务器,然后让 postfix 仅将退回转发到退回 SMTP 应用程序?
如果让 postfix 处理所有传入消息更好,那么我该如何配置它以仅将格式如上述地址的消息转发到在非特权端口(8025)上运行的另一个 SMTP 服务器?
答案1
我总是不愿意将服务放在通常不活动的端口上——不是因为软件缺陷,而是因为人为缺陷。继承此设置的系统管理员必须非常善于追踪“电子邮件被退回时会去往何处”的架构,否则您的文档需要非常清晰(并且易于查找)。
因此,回答您的第一个问题——我的建议是使用单独的服务器来处理退回。这样可以通过 dns 很好地记录下来,而不是埋藏在 postfix 的配置文件中。
如果您选择忽略该建议,则可以利用 postfix 的传输图来实现。例如,将其添加到 main.cf:
transport_maps = regexp:/etc/postfix/transport
并在传输文件中使用类似这样的内容:
/bounce.*/ smtp:bounces.mydomain.com:8025
(不要忘记‘postmap /etc/postfix/transport’和‘postfix reload’)
答案2
如果您的 8025 服务仅统计每个收件人的退回邮件数并将其丢弃,您不妨通过 Postfix 运行退回邮件,并将整个“退回数据库”功能委托给 Postfix 策略服务。这样,策略服务器就无需使用 SMTP,而只需解析 Postfix 与之通信的简单协议。