Postfix 将根据发件人域收到的邮件发送到本地邮箱

Postfix 将根据发件人域收到的邮件发送到本地邮箱

我正在尝试配置 postfix 以将来自不同域的传入邮件放入各自的 catchall 邮箱。

用例如下:

  • 企业客户发送电子邮件至该地址[电子邮件保护](本地部分始终不同,域部分对于所有客户始终相同)
  • 邮件所在的目标邮箱必须与发件人的域名相同(来自[电子邮件保护][电子邮件保护]放置在 /customer1.com 中,来自的邮件[电子邮件保护]在 /customer2.com)
  • 邮箱 /customer1.com 和 /customer2.com 由具有不同身份验证凭据的不同客户端通过 POP3 轮询

例如,以下收到的邮件:

From: [email protected]
To: [email protected]

应该放在本地虚拟邮箱中:

/customer1.com

收件人域始终相同。本地邮箱均被命名为可能的传入发件人域。

是否有可能为此目的使用 virtual_mailbox_maps 或类似工具?

更新:

我已在中创建以下条目/etc/postfix/virtual_alias_maps

@myservice.com       catchall

将所有邮件指向邮箱“catchall”。

在这个邮箱中我创建了一个 Sieve 脚本 /var/mail/vhosts/myservice.com/catchall/.dovecot.sieve

require ["variables"];

# pick any ("*") domain in From or Sender header
if address :matches :domain ["From", "Sender"] "*" {
        #  the variable ${1} contains the domain name
        redirect "${1}";
}

此 Sieve 脚本将所有邮件重定向到与发件人域相同的邮箱(例如 customer1.com)。

要拒绝来自未知(不在数据库中)域的所有邮件,请使用 smtpd_sender_restrictions /etc/postfix/main.cf

smtpd_sender_restrictions =  permit_mynetworks, pgsql:/etc/postfix/pgsql_check_sender_access.cf

/etc/postfix/pgsql_check_sender_access.cf

user = dbuser
password = dbpass
dbname = customers
query = select case count(*) when 0 then 'REJECT' else 'OK' end from servers where user_domain='%d';
hosts = 127.0.0.1:5432

答案1

这不是 MTA 的工作。最好在 MUA(您的客户端程序)中执行此操作。

如果您确实想在服务器端执行此操作,请选择一些邮件过滤程序,如 dovecot(它与 sieve 兼容)或 maildrop(有自己的专有过滤解决方案)。(procmail 也可用,但我不推荐那个)。

这里有一份 Maildrop 配置指南http://www.postfix.org/MAILDROP_README.html 如何设置过滤器:http://www.courier-mta.org/maildropex.html

相关内容