首页 > 解决方案 > 为什么我的自定义 postfix 虚拟邮箱不起作用

问题描述

我有什么

我正在 Virtualbox 上测试后缀。最初,我通过将传入邮件(朝向我的域)传递到管道(来自此答案https://superuser.com/a/1490699的方法 1 )并让传出邮件正常发送而取得了成功。

现在我已将我的 postfix 配置切换为使用虚拟邮箱功能(仍在 Virtualbox 上),因此我可以使用 Mysql 在接受邮件之前查询域和用户是否存在。使用如下配置:

virtual_transport = myhook:dummy
    
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

通过 postmap -q 进行测试时一切正常,我从“mydestination”中删除了我的域,以确保邮件不会传输到本地。

问题

我遵循了很多指南

https://www.linode.com/docs/guides/email-with-postfix-dovecot-and-mysql/ https://wiki.gentoo.org/wiki/Complete_Virtual_Mail_Server/Postfix_to_Database

然而,这些指南是在考虑 Dovecot 的情况下制作的,我不会使用它。

通过命令行向在虚拟邮箱中找到的另一个用户发送邮件时,我收到以下错误

to=<me@laravel8.test>, orig_to=<me>, relay=none, delay=36, delays=36/0.02/0.05/0, dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=laravel8.test type=AAAA: Host not found)

尽管域出现在 virtual_mailbox_domains 中。更改为 ipv4 没有任何变化

我读到这可能是由于 Postfix 没有使用 /etc/hosts(将 laravel8.test 指向 127.0.0.1)所以我在 main.cf 中添加了以下几行

lmtp_host_lookup = native
smtp_host_lookup = native

但现在我得到这个错误:

 to=<support@laravel8.test>, relay=none, delay=0, delays=0/0/0/0, dsn=5.4.6, status=bounced (mail for laravel8.test loops back to myself)

是的,这不是我想要的吗?我希望将邮件发送给另一个用户,然后按照 virtual_transport 中的声明将此邮件传输到我的管道。

无论我做什么,我似乎只会遇到更多问题。

如果可能,请提供帮助。

标签: emailpostfix-mta

解决方案


问题似乎是

/etc/postfix/mysql-virtual-mailbox-domains.cf

曾是

user = root
password =
hosts = 127.0.0.1
dbname = laravel
query = SELECT domain FROM mailbox WHERE domain='%d' LIMIT 1

什么时候应该

user = root
password =
hosts = 127.0.0.1
dbname = laravel
query = SELECT domain FROM mailbox WHERE domain='%s' LIMIT 1

我对应该在何时何地使用 %s 或 %d 和 %u 感到非常困惑。这里 postfix 只发送域到这个 mysql 查询,所以必须是整个字符串作为 %s


推荐阅读