我正在使用 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.com
到dbmail-lmtp:
),并archive.example.com
使用virtual
传输传递的域保存到本地邮件。
希望有帮助!