配置 phplist 通过多个 Postfix 进程和多个 IP 地址发邮件

如果你使用过 postfix 服务器,就知道外发邮件的瓶颈不是服务器硬件本身,而是外部邮件服务器接受邮件的速率。

为了充分利用闲置资源,我们可以给服务器增加一个或多个IP地址,利用Postfix的多进程功能来增加一个或多个Postfix进程。这样,就可以让服务器的邮件发送量翻倍。

准备工作

1. 首先,给主机增加一个IP地址。

2. 确认 Postfix 服务器正常运行。

3. 启用 Postfix 的多进程支持,执行命令:
postmulti -e init

4. 创建一个新的Postfix进程:

postmulti -I postfix-2 -G outgoing -e create

-I 是进程的名字,可以使用主机名或其它名字。
-G 是组的名字,本帖子没有用到组所以随便起个名字。如果想同时重启某几个进程时可用到组。

上面的创建新进程的命令,会生成用于保存配置文件和邮件队列的目录。目录结构很简单但很重要,因为后面使用进程时会需要用到:

配置文件例如 main.cf 文件位于 /etc/instancename/,以前面的新进程为例,目录是 /etc/postfix-2/
邮件队列位于 /var/spool/instancename/,以前面的新进程为例,目录是 /var/spool/postfix-2/

5. 给 Postfix 进程绑定IP地址

假设我们有两个 IP 地址 – 192.168.50.44 192.168.50.45
系统默认的进程的配置文件位于目录 /etc/postfix, 我们保留原来的 localhost, 并绑定特定的地址 192.168.50.44:
修改文件 /etc/postfix/main.cf,找到:
inet_interfaces = all
修改为:
inet_interfaces = localhost, 192.168.50.44

打开文件 /etc/postfix/master.cf, 找到:
smtp unix - - n - - smtp
修改为:
smtp unix - - n - - smtp -o smtp_bind_address=192.168.50.44

也就是默认的 Postfix 进程将通过 192.168.50.44 发送邮件。

对其它的每个进程,修改相应的 /etc/instancename 目录下的 main.cf 配置文件,来绑定各自的 IP 地址。
对我们上面的例子,就是修改文件 /etc/postfix-2/main.cf,找到:
inet_interfaces = all
修改为:
inet_interfaces = 192.168.50.45

打开文件 /etc/postfix-2/master.cf, 找到:
smtp unix - - n - - smtp
修改为:
smtp unix - - n - - smtp -o smtp_bind_address=192.168.50.45

6. 重启 postfix 服务使前面的修改生效

7. 安装一个或者多个 phplist

8. 配置每个 phplist 从不同的 postfix 进程发出邮件
以前面的postfix新进程为例,在 phplist 的文件 admin/index.php 的前面加上下面的代码:
putenv("MAIL_CONFIG=/etc/postfix-2");
(说明: 如果只想安装一个phplist,那么 “postfix-2” 可以使用变量)

9. 最后需要将运行 phplist 用户的名字加入 /etc/postfix-2/main.cf 的允许发送邮件的用户列表
authorized_submit_users = testuser

10. (供参考) 下面是用于 启动/停止/启用/禁用 postfix 进程的命令:
postmulti -i postfix-2 -p start
postmulti -i postfix-2 -p stop
postmulti -i postfix-2 -e enable
postmulti -i postfix-2 -e disable

现在,我们可以同时运行多个 phplist 的计划任务,同一台邮件服务器的邮件发送量就翻倍了。