如何在 Postfix 中将电子邮件发送给虚拟用户之前保存它?

如何在 Postfix 中将电子邮件发送给虚拟用户之前保存它?

我正在使用 Postfix 和 DBMail,因此 Postfix 会向虚拟用户发送电子邮件。它一直运行良好。

但是,我希望在发送给虚拟用户之前将所有电子邮件保存到本地磁盘。我发现 content_filter 可以做到这一点,但这对我来说不是一个好方法,因为我已经使用它来通过 DSpam 进行垃圾邮件过滤。

还有其他方法可以做到这一点吗?

谢谢。

答案1

我做过非常类似的事情;似乎有几种不同的方法。

首先,您可以使用它recipient_bcc_maps来为该域的传入邮件生成一个附加地址。例如,这可以是一个表,用于说明如果电子邮件有收件人,[email protected]则应将其密送至archive,然后将其别名为文件/maildir。

或者,我在本地执行此操作的方式是在我的“虚拟”( virtual_mailbox_maps) 表中包含如下条目:

[email protected]           [email protected], offline-comms

然后在我的“vmailbox”(virtual_mailbox_maps)表中:

[email protected]           supply/

然后,我将virtual_mailbox_base设置为邮件存档的基本目录。“虚拟”表中的条目将传入的电子邮件拆分为[email protected]一个投递至offline-comms(将电子邮件提供给应用程序服务器)和一个投递至自身,因此它也会在“vmailbox”中查找。“vmailbox”条目告诉virtual(8)投递代理将电子邮件保存到名为“supply”的 Maildir 下virtual_mailbox_base

当然,这意味着必须更新两个文件才能添加新收件人。但如果您从数据库生成这些文件,或者使用数据库查找,那么这实际上就不是问题。

请注意,我已将邮件别名为 ,以便offline-comms将其传送到应用程序服务器。这可能不适合您,具体取决于您如何集成 DBMail。另一种方法是将传入电子邮件别名为用于存档的特殊域:

[email protected]   [email protected], [email protected]

然后将虚拟域emails.example.com提供给您的 dbmail 传输(例如,使用映射transports简单地映射emails.example.comdbmail-lmtp:),并archive.example.com使用virtual传输传递的域保存到本地邮件。

希望有帮助!

相关内容