我已经在这上面花了无数的时间,现在我想我应该到“互联网”上寻求帮助。
我已经安装了全新的 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