![客户端尝试访问不存在的命名空间(Dovecot 和 Squirrelmail)](https://linux22.com/image/713125/%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B0%9D%E8%AF%95%E8%AE%BF%E9%97%AE%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%EF%BC%88Dovecot%20%E5%92%8C%20Squirrelmail%EF%BC%89.png)
我已经研究了好几天,尽管搜索了无数次,却还是找不到解决方案。
我在一个 vps 中托管了多个域名,并将所有电子邮件转发到 gmail 地址,这样可行,但我想设置自己的电子邮件,这样我就不再需要依赖 gmail 了。
Postfix 和 Dovecot 按照此处的说明进行安装:在 CentOS 7 上使用 Postfix、Dovecot 和 MariaDB 发送电子邮件
考虑到 Squirrelmail 是最基础的电子邮件客户端,我决定从它开始。我花了几天时间尝试让它接收和发送电子邮件(我不得不禁用 https 访问才能至少加载页面 - 稍后会处理这个问题,TLS 也被禁用 - 如果它与其他所有东西在同一台服务器上运行,则不需要这样做)。
不过,正确显示页面似乎是另一回事。在左侧面板上,也就是应该显示文件夹列表的地方,我收到“错误:无法完成请求。查询:CREATE“已发送”给出的原因:客户端尝试访问不存在的命名空间。(邮箱名称可能应该以 INBOX 作为前缀。)”。根据我读过的所有内容(而且有很多),我相信问题出在 dovecot,但我可能错了。
如果有人能指出我的配置有什么问题,我将不胜感激。
以下是我能想到的所有配置文件:(机密信息由##### 替换)
/etc/dovecot/dovecot.conf:
protocols = imap pop3 log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem
namespace {
type = private
separator = .
prefix = INBOX.
inbox = yes }
service auth {
unix_listener auth-master {
mode = 0600
user = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
user = root }
service auth-worker {
user = root }
protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@##########.com }
protocol pop3 { pop3_uidl_format = %08Xu%08Xv }
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext }
userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes }
/etc/dovecot/conf.d/10-mail.conf:(为简单起见,删除了评论)
namespace inbox {
inbox = yes
list = yes
}
编辑-根据 Jens 的要求,以下是“doveconf -n:”的输出
从 dovecote.conf 中删除命名空间声明后,Squirrelmail 就可以正常工作了。
# 2.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 4.5.0-x86_64-linode65 x86_64 CentOS Linux release 7.4.1708 (Core) ext4
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
protocols = imap pop3
service auth-worker {
user = root
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-master {
mode = 0600
user = vmail
}
user = root
}
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
driver = static
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
log_path = /home/vmail/dovecot-deliver.log
postmaster_address = postmaster@#######.com
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
答案1
谢谢你的帮助,Jens!
删除重复的命名空间定义(一次在 /etc/dovecot/dovecot.conf 中,然后再次在 /etc/dovecot/conf.d/10-mail.conf 中)并仅保留 10-mail.conf 中的定义后,Squirrelmail 可以正常工作。
当在两个文件中声明命名空间时,“dovecot -n”返回的结果与我的第一篇文章(上面)中显示的相同,只是命名空间部分如下所示:
namespace {
inbox = yes
location =
prefix = INBOX.
separator = .
type = private
}
由于两个配置文件中都有命名空间声明,Thunderbird 和 Squirrelmail 会报同样的错误信息。然而,Roundcube 却非常满意。
无论如何,“dovecot -n”都不会报告问题。
亚历克斯