我已经将 exim 设置为接受带有 - 后缀的本地地址。因此,如果乔那么是用户乔任何东西被接受。
但是,有些子地址我想拒绝(它们已经充斥了太多垃圾邮件,并且没有任何有用的信息)。在本地用户路由器处理之前,有没有办法做到这一点。我可以在别名文件中做些什么吗?
我在 Ubuntu 10.04 上运行
答案1
在本地用户路由器之前添加另一个路由器,该路由器仅用于拒绝您想要拒绝的 lp/后缀组合。以下是硬编码后缀的示例:
reject_suffixes:
driver = redirect
local_parts = joe-badsuff1 : joe-badsuff2
allow_fail
fail_verify = true
data = :fail: invalid email <$local_part@$domain>
另一种方法是从文件中查找。基本概念相同,只是通过文件查找:
reject_suffixes:
driver = redirect
local_parts = /path/to/file
allow_fail
fail_verify = true
data = :fail: invalid email <$local_part@$domain>
local_parts 指向的文件只是要拒绝的 local_parts 列表:
joe-badsuff1
jane-badsuff2
jack-badsuff1
# etc...
我更喜欢使用路由器来执行此操作而不是 ACL,因为它可以捕获所有边缘情况,例如本地提交的消息(因此不会触发 rcpt acl)等。
答案2
您可以创建一个 acl 来拒绝这些地址。在“begin acl”部分,添加如下内容:
deny message = This address is locked.
recipients = /a/file/containing/the/rejected/addresses
即使收件人本来会被接受,这也将拒绝该消息。此处的“收件人”部分是一个简单的列表,您可以使用任何类型的列表,而不必指定文件(sql 查找、硬编码列表等)。
答案3
只需为它们添加一个别名。
# 别名 : :action: 评论 joe-spam::fail:因垃圾邮件数量过多而被禁用。
答案4
我喜欢在同一个别名文件中管理被拒绝的子地址和被接受的地址(每个域都有一个)。我还希望每个域只有一个路由器。
如果您的路由器在别名文件中进行查找,则只需首先查找 $original_local_part,然后查找 $local_part,因为 $original_local_part 包含带有后缀的整个地址(又名子地址):
data = ${lookup {$local_part$local_part_suffix@$domain} nwildlsearch {/cfg/aliases} {$value}\
{${lookup {$local_part@$domain} nwildlsearch {/cfg/aliases} {$value}}}}
然后在别名文件中,只需为要拒绝的子地址添加一行:
[email protected]: :fail: no such user, too much spam
[email protected]: [email protected]
因此,如果 exim 找到子地址(“[电子邮件保护]“)在第一次搜索中,它会处理它(在我的例子中失败),但如果没有,那么第一次查找将失败并导致第二次查找仅搜索本地部分(“[电子邮件保护]“)并查找并接受/重定向它。如果当前地址上没有子地址,它可能只在第一次查找中匹配。