Postfix + Dovecot - 未在 vmail 目录中接收邮件

Postfix + Dovecot - 未在 vmail 目录中接收邮件

我已经在这上面花了无数的时间,现在我想我应该到“互联网”上寻求帮助。

我已经安装了全新的 postfix + dovecot + mysql。

现在,我可以从我的一个映射帐户接收电子邮件'[电子邮件保护]' 但由于某种原因,所有邮件都插入到 /var/mail/sean

预期位置是:/var/vmail/domain.com/sean

我将列出我用来实现这个功能的关键代码。

postfix 主控文件

dovecot   unix  -       n       n       -       -       pipe
flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d ${recipient}

后缀main.cf

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Dovecot 10-mail.conf

mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = mail
first_valid_uid = 150
last_valid_uid = 150

Dovecot 10-auth.conf

disable_plaintext_auth = yes
!include auth-sql.conf.ext

Dovecot auth-sql.conf.ext

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}

Dovecot dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=mail user=mail password=P@ssw0rd
default_pass_scheme = MD5-CRYPT

password_query = \
SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, \
'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid \
FROM mailbox WHERE username = '%u' AND active = '1'

user_query = \
SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, \
150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota \
FROM mailbox WHERE username = '%u' AND active = '1'

这就是我想要做的配置部分的全部内容了。

你知道我做错了什么吗?{ 明天这个时候我应该就秃头了 :) }

答案1

我猜你混淆了两类用户。一类是系统用户,一类是虚拟用户。

如果您尝试使用系统用户,只需添加此行:

mailbox_command = /usr/local/libexec/dovecot/deliver
# 或者
mailbox_command = /usr/libexec/dovecot/deliver
# 或者
mailbox_command = /usr/lib/dovecot/deliver
# 或者它安装在您的系统中的任何地方。

如果您尝试使用虚拟用户,您还必须在 Postfix 上配置它们。

像这样:obs:我会尝试使用你的 mysql confs,但不确定是否能做对。

/etc/postfix/虚拟地址-mysql.cf

内容:

用户=邮件
密码=P@ssw0rd
数据库名称=邮件
主机=本地主机
查询 = 从邮箱中选择用户名作为地址,其中 active = '1' 和用户名 = '%s';

看,我可能遗漏了您查询的一些内容。

现在 postfix 能够知道你的虚拟用户

现在需要绘制地图。

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_mailbox_maps $virtual_mailbox_domains
virtual_mailbox_maps = 代理:mysql:/etc/postfix/virtual-address-mysql.cf

我会使用虚拟用户,比系统用户更好地管理数据库。

您还可以执行虚拟域和虚拟别名

相同的逻辑和配置如下:

virtual_mailbox_domains = 代理:mysql:/etc/postfix/vdomains.cf
virtual_alias_maps = 代理:mysql:/etc/postfix/virtual-alias.cf

我想是的。如果需要更多帮助,我想你可以找到

达夫科特 维基

答案2

我也遇到了这个问题,花了一些时间来深入研究。如果有人遇到这种情况,那么值得检查/var/log/mail.log以下错误:

postfix/trivial-rewrite[2149]: warning: do not list domain localdomain.co.uk in BOTH mydestination and virtual_mailbox_domains

localdomain.co.uk我刚刚从文件mydestination = line中删除了/etc/postfix/main.cf。这似乎已经解决了问题。

答案3

遇到了同样的问题。经过一周的夜晚,发现您可能需要在 /home/username/mail/.imap/INBOX 下创建文件夹 INBOX。

这对我来说很有效。

系统是 roundcube / dovecot / postfix / mysql /centos 6.4 希望我能让一些人保持理智!!

保罗。

答案4

您的“virtual_mailbox_map.cnf”文件中的问题(可能有不同的名称)应该是这样的

hosts = 127.0.0.1
user = postfix
password = password
dbname = postfix
query = SELECT CONCAT(domain, '/', maildir) FROM mailbox WHERE username='%s' AND active = 1

查询中的修复,因为在我看到的所有手册中,他们都使用了类似这样的内容

query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

相关内容