Postfix 向 unix 用户而不是虚拟用户发送

Postfix 向 unix 用户而不是虚拟用户发送

我已经设置 postfix 来使用虚拟用户来收发入站电子邮件,并从 mysql 读取配置。

但是,当我尝试使用 之类的方法在本地发送邮件时,sendmail root@localhost < testmail查询正在执行,但邮件并未发送到虚拟用户目录。而是创建了
目录。/var/mail/root

Mysql 配置似乎正确,因为执行了以下查询:

SELECT destination FROM aliases WHERE mail='root@localhost' and enabled = 1

+----------------+
| destination    |
+----------------+
| root@localhost |
+----------------+

SELECT destination FROM aliases WHERE mail='localhost' and enabled = 1;
Empty set (0.00 sec)

SELECT domain FROM domains WHERE domain='localhost' and enabled = 1;

+-----------+
| domain    |
+-----------+
| localhost |
+-----------+

但它们似乎被忽略了。
尝试通过 Courier IMAP 登录时,结果如下:

1 login root@localhost <password>
* BYE [ALERT] Fatal error: No such file or directory: No such file or directory

因为 Postfix 创建的文件夹不是为用户在 DB 中设置的文件夹。

配置

(主要灵感来自指引):

alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks_style = host
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +

# working relayhost config here

smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, permit
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit

virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
virtual_uid_maps = static:5000

答案1

为了确定 Postfix 是否确实将邮件投递到虚拟邮箱,您可以检查relay中的值/var/log/mail.log
尝试:

tail -100 /var/log/mail.log | grep relay=

您最有可能看到的是relay=local,而您想要的relay=virtual

发生这种情况是因为 postfix 正在向 发送local_recipient_maps
此问题的一个迹象是,您可以在日志中看到

warning: do not list domain example.com in BOTH mydestination and virtual_mailbox_domains

您可以通过以下方式解决此问题使用空值覆盖 mydestination

#/etc/postfix/main.cf
mydestination = 

或者强制 Postfix 使用虚拟传输,即使对于本地邮箱也是如此

#/etc/postfix/main.cf
local_transport = virtual
local_recipient_maps = $alias_maps $virtual_mailbox_maps

第一个选择更好,因为它解决了根本问题,而不是在安静的角落里解决它。

答案2

IMAP 服务器是否应该直接获取邮件,而不是从 maildir 或 /var/mail/foo 获取?

我使用 dovecot,并且设置了 lmtp 转发套接字,dovecot 会监听该套接字。当新邮件到达时,postfix 会将其发送到 dovecot 套接字。目录等均由 dovecot 管理。

相关内容