Postfix邮件转发详解 二

接上一篇Postfix邮件转发详解 一本文继续侧重讲下 Postfix 邮件转发。

延迟投递时间

在某些情况下,你可能会希望 postfix 先收下邮件,但不立刻投递出去。等到你下达posqueue -f domain命令之后,或是postfix 从支持快速清空功能的网域收到ETRN SMTP命令之后,postfix才递送出被暂扣留的邮件。

最常见的一种情况是 ISP 为客户的网域代收邮件,但是客户的网络并不总是保持连接。ISP 必须先储存邮件,直到客户的网络恢复连接,并且能收下邮件为止。类似的情况还有客户网络上的用户,应该要能够通过本地的邮件网关来寄信,该网关必须能先暂存外寄邮件,直到网络恢复连接时才投递出去。

暂缓转发邮件

在以下的程序中,我们要先创建一种新型的传输法,称为“ondemand”,然后设定传输表,要求所有寄到 example.com 网域的邮件,一律先暂时扣留在队列里。

1、在master.cf设置一种新的传输法,并命名为 ondemand。它的配置应该与 smtp 传输法一样

ondemand unix - - n - - smtp

2、要求 postfix 自动延缓任何通过 ondemand 递送的邮件。只要将新设的 ondemand 传输法列在main.cf的defer_transports参数中,就可以达到自动延缓的效果:

defer_transports = ondemand

3、确定transport_maps参数指向我们的传输表:

transport_maps = hash:/etc/postfix/transport

4、编辑修改传输表,使得 example.com 网域的所有邮件都通过 ondemand 传输法来投递:

example.com ondemand

5、运行 postmap 将传输表转换成数据库格式:

postmap /etc/postfix/transport

6、要求 postfix 重新读取配置文件,使我们所做的改变开始生效:

postfix reload

现在,所有要寄到 example.com 网域的邮件都会被扣留在队列里,直到你下达以下命令为止:

postqueue -f example.com

暂缓投递外地邮件

假设有一个小型办公室网络,他们与 Internet 之间没有连接,而是由网管人员架设呢一台邮件服务器来接收内部员工寄到外界的邮件。网管人员希望能够控制外地邮件的投递时间,让 postfix 只有在有连接时才送出外地邮件。

1、将 smtp 服务名称列在main.cfdefer_transports参数中:

defer_transports = smtp

2、要求 postfix 重新加载配置文件,使我们的改变生效:

postfix reload

以后,每当办公室网络与Internet接通时,网管人员就可以使用postqueue -f命令来送出所有外地邮件。

入站邮件网关

邮件网关是一种能收下邮件然后将其转交给其他系统的邮件服务器系统。在在网络术语中,“网关"一词的意义有两个:一是物理上的含义,代表某个网络到达另一个网络的必经通路;另一层含义是协议的转换,将一种协议所传达的信息以另一个协议传到目标系统。

邮件网关通常被设置在企业网络 与Internet 之间,甚至与防火墙系统搭配在一起,以尽可能减少需要直接访问Internet的服务器数量。

假设有一个企业网络,这家企业有多个部门,各部门都有自己的子网域,也有自己的内部邮件服务器。网关系统 gw.example.com 负责收下企业网络的所有邮件。假设人力资源部门的邮件系统位于 mail.example.com,此部门员工的邮件地址是user@hr.example.com;业务部门的邮件系统位于mail2.example.com,他们的邮件地址格式是user@sales.example.com。每个字网络上的主机,应该分别从他们各自的内部邮件服务器取信。邮件网关gw.example.com必须设置传输表,才能将收下的邮件交付给正确的内部邮件服务器。

下列程序示范要如何设定 gw.example.com,才能使它将邮件交给正确的内部服务器。

1、确定hr.example.comsales.example.comDNS mx 记录都指向gw.example.com网关

2、编辑网关系统的main.cf配置文件,将两个子网域列入relay_domains参数:

relay_domains = hr.example.com, sales.example.com

3、确定transport_maps参数指向正确的传输表

transport_maps = hash:/etc/postfix/transport

4、编辑修改传输表transport内容,将各网域指向正确的内部服务器:

transport maps
hr.example.com relay:[mail.example.com]
sales.example.com relay:[mail2.example.com]

注意,内部邮件服务器的主机名是放在一对方括号内,这使得网关系统可跳过mx查询,而直接将邮件递送到主机名称所对应的ip地址。

5、重新加载配置文件,使改变生效:

postfix reload

郑重建议你将 mail 与 mail2 的所有合法邮箱列表汇整成一个查询表,放在 gw 系统上,并将网关系统的relay_recipient_maps参数指向查询表;否则,gw.example.com 将会收下许多垃圾邮件。

出站邮件网关

若邮件系统没有足够的信息或能力将邮件直接送达目的地,它可将邮件交给位于更有利位置的其他系统,间接送到目的地。假设那两个内部邮件系统不能直接访问 Internet,它们不能将字网络上的用户寄到外地的邮件直接递送到目的地,但它们可以将所有外地邮件都托付给网关系统,由网关代为递送。下列步骤示范如何设定 mail.example.com 上的 postfix server,使它将收下的所有外地邮件都交给 gw.example.com。

在开始设定内部邮件系统之前,请确定邮件网关已被设定成能接收内部邮件系统的转发要求。网关系统的mynetworks参数应该涵盖内部邮件系统的所有 ip 地址;此外,如果网关系统使用了smtp ube过滤规则,请确定permit_mynetworks被列在过滤规则里。

1、在各部门的办公室贴公告,告诉你的同事,要求他们设定 MUA 使用的内部邮件系统(mail1 mail2。。。)为 smtp server

2、设定内部邮件系统(mail1与mail2)的mynetworks(或mynetworks_style)参数,确定子网络上的全部客户端系统都涵盖在内。

3、编辑内部邮件系统的main.cf,将relayhost参数指向网关系统:

relayhost = [gw.example.com]

4、重新加载 postfix 配置文件,使改变生效:

postfix reload

现在,所有送到 mail.example.com 的外地邮件,都会通过 gw.example.com 送到目的地。

UUCP、传真以及其他投递机制

postfix 的在线文件描述了如何设定 postfix 使其将邮件交给传真机系统以及如何使用 postfix 来架设 UUCP 网关。当你的postfix 需要与任何特殊设备接轨时,这些例子提供了很好的参考。原则上,如果你需要在不同类型的系统或网络之间架设网关,传输表提供了引导邮件到其他系统或设备的机制。

Last modification:November 23, 2020
如果觉得我的文章对你有用,请随意赞赏