我管理一个基于 Postfix 的电子邮件服务器,该服务器有过去和当前电子邮件的副本。一些用户已经离开,但他们的电子邮件历史记录需要保留并可访问。在目前的情况下,发送给那些已经离开的用户的任何电子邮件仍可正常接收。我想阻止发送到这些帐户的任何新电子邮件。我可以看到使用 smtpd_restriction_classes 来实现这一点的方法。我是否必须将所有用户都包含在 check_recipient_access 哈希表中,还是可以只包含我想阻止的那些帐户?
smtpd_restriction_classes = restrictive, permissive
restrictive = DEFER
permissive = permit
check_recipient_access = hash:/etc/postfix/recipient_access
/etc/postfix/recipient_access:
[email protected] restrictive
[email protected] restrictive
答案1
看来这种阻止是永久性的。如果您使用DEFER
,Postfix 将发送临时错误代码450
,导致发送 MTA 稍后重试。从RFC 5321, 4.2.1& 4.2.2:
4yz
瞬态否定完成答复命令未被接受,请求的操作未发生。但是,错误情况是暂时的,可以再次请求操作。发送方应返回到命令序列的开头(如果有)。当两个不同的站点(接收方和发送方 SMTP 代理)必须就解释达成一致时,很难为“瞬时”赋予含义。此类别中的每个回复可能具有不同的时间值,但 SMTP 客户端应该重试。
450 Requested mail action not taken: mailbox unavailable (e.g., mailbox busy or temporarily blocked for policy reasons) 550 Requested action not taken: mailbox unavailable (e.g., mailbox not found, no access, or command rejected for policy reasons)
我会使用错误代码550
,默认永久REJECT
存在access_map_reject_code
= 554
。
然后,它check_recipient_access
不再单独起作用,而是在smtpd_recipient_restrictions
。
smtpd_recipient_restrictions =
permit_mynetworks,
. . .
check_recipient_access hash:/etc/postfix/recipient_access,
. . .
除了错误代码之外,您还可以使用自定义的、可读的信息性错误消息:
/etc/postfix/recipient_access:
[email protected] 550 Mailbox doesn't exist. See https://example.com/contact
[email protected] 550 Mary no longer works at Example Ltd. Contact Jason, instead.
因为它是一个hash:
数据库,所以请永远记住postmap /etc/postfix/recipient_access
。