这篇文章我们来介绍下Postfix+MySQL虚拟用户下的邮件捕获配置。正常情况发件人发送一封邮件到指定域的邮箱,但是如果这个邮箱在对应服务器上没有被创建,也就是说实际不存在。那么一般邮件服务器会返回用户不存在的代码,发件箱就会收到一个退信的提示。
在使用付费的企业邮箱(比如腾讯企业邮、网易企业邮、云邮)时,有一个配置是邮件捕获。这个配置可以让当邮件发送到不存在用户时,投递到我们的一个指定邮箱,而不产生用户不存在的退信提示。
那么在自建的Postfix上我们应该如何设置?
1、新建 /etc/postfix/mysql_virtual_alias_email2email.cf文件,内容类似如下
user = root
password = 123456
hosts = 127.0.0.1
dbname = mail
query = SELECT username FROM mailbox WHERE username='%s';
2、修改 virtual_alias_maps 配置,把新建的用户列表添加到别名映射
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_email2email.cf
这个配置比较重要, 本质上别名将始终优先于邮箱。因此要使其正常工作,还需要将实际的电子邮件地址添加到别名中。如果不加这个配置,那么后面所有的邮件都会转发到指定邮箱,即使是已经存在的邮箱,这样就不符合我们的实际需求了。
3、创建域的别名映射
进入数据库新建一条数据,类似如下:
mysql> select * from alias ;
+--------------+----------------+---------------------+---------------+---------------------+--------+
| name | address | goto | domain | createdate | active |
+--------------+----------------+---------------------+---------------+---------------------+--------+
| 邮件捕获 | @szl724.com | admin@szl724.com | szl724.com | 2022-08-09 06:00:04 | 1 |
+--------------+----------------+---------------------+---------------+---------------------+--------+
1 row in set (0.00 sec)
4、最后重启一下Postfix服务器
systemctl restart postfix
5、测试观察系统日志
看到这样就可以了。
Aug 9 10:13:37 vultr postfix/virtual[32725]: 2B92D45DB: to=<admin@szl724.com>, orig_to=<zhangnq@szl724.com>, relay=virtual, delay=0.43, delays=0.4/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
如果使用的QY-Mail企业邮箱后台管理系统,可以直接在后台添加配置。
部门群组,新建群组
用户管理,点击需要收件的用户,加入到邮件捕获群组
保存即可