您可以使用 SEND_ACCESS 和 ORIG_SEND_ACCESS 映射表来控制其他人能否发送邮件、接收邮件,或同时控制这两方面。访问检查内容包括邮件的信封 From: 地址和信封 To: 地址、邮件进入的通道以及要尝试发出邮件的通道。
如果存在 SEND_ACCESS 或 ORIG_SEND_ACCESS 映射表,则对于通过 MTA 的每封邮件的每个收件人,MTA 将使用以下格式的字符串扫描表格(请注意垂直条字符 | 的使用):
src-channel|from-address|dst-channel|to-address
其中,src-channel 是将邮件排队的通道;from-address 是邮件创始者的地址;dst-channel 是邮件要排队发送至的通道;to-address 是邮件要发送到的地址。在这四个字段中的任意一个字段中使用星号将使该字段匹配所有适当的通道或地址。
此处的地址为信封地址,即信封 From: 地址和信封 To: 地址。如果是 SEND_ACCESS,则将在执行重写、别名扩展等操作后检查信封 To: 地址;如果是 ORIG_SEND_ACCESS,则将在执行重写之后,但在别名扩展之前检查最初指定的信封 To: 地址。
如果搜索字符串匹配某个模式(即,表中某个条目的左侧),则将检查映射的结果输出。如果输出包含标志 $Y 或 $y,则允许对该特定 To: 地址进行排队。如果输出包含 $N、$n、$F 或 $f 中的任意一个标志,则对该特定地址进行排队将被拒绝。在被拒绝的情况下,映射输出中可能提供可选的拒绝文本。此字符串将包括在 MTA 发布的拒绝错误中。如果没有输出字符串(除 $N、$n、$F 或 $f 标志以外),则将使用默认的拒绝文本。有关其他标志的说明,请参见18.3 访问控制映射表标志。
将 MAT 选项 ACCESS_ORCPT 设置为 1 时,将向传递给 SEND_ACCESS、 ORIG_SEND_ACCESS、MAIL_ACCESS 和 ORIG_MAIL_ACCESS 映射表(包含原始收件人 [ORCPT] 地址)的探测值添加一个以垂直条分隔的其他字段。如果邮件没有 ORCPT 地址,则使用初始的、未经修改的 RCPT TO: 地址代替。默认值为 0,探测值位于末尾:
src-channel|from-address|dst-channel|to-address|ORCPT_address
在以下示例中,从 UNIX 用户代理(例如 mail、Pine 等)发送的邮件源于本地通道 l,传送至 Internet 的邮件通过某种类型 TCP/IP 通道发出。假定不允许本地用户(邮寄主管除外)向 Internet 发送邮件,但可以从 Internet 接收邮件。则下面示例中所示的 SEND_ACCESS 映射表是可以实施此限制的一种方法。在此映射表中,假定本地主机名为 sesta.com。在通道名称 "tcp_*" 中使用了通配符,以便匹配所有可能的 TCP/IP 通道名称(例如 tcp_local)。
SEND_ACCESS *|postmaster@sesta.com|*|* $Y *|*|*|postmaster@sesta.com $Y l|*@sesta.com|tcp_*|* $NInternet$ postings$ are$ not$ permitted |
在拒绝邮件中,使用了美元符号,用以引用邮件中的空格。如果没有这些美元符号,拒绝邮件将提前结束,系统只能读取 "Internet",而不是 "Internet postings are not permitted"。请注意,此示例忽略了其他可能的“本地”邮件源,例如来自基于 PC 的邮件系统或来自 POP 或 IMAP 客户端的邮件。
尝试发送邮件的客户端将决定是否把 MTA 拒绝错误文本实际提供给尝试发送邮件的用户。如果使用 SEND_ACCESS 拒绝外来 SMTP 邮件,MTA 将只发出一段包括可选拒绝文本的 SMTP 拒绝代码;SMTP 发送客户端将负责使用该信息构建要发送回原始发件人的退回邮件。