客户端尝试访问不存在的命名空间(Dovecot 和 Squirrelmail)

客户端尝试访问不存在的命名空间(Dovecot 和 Squirrelmail)

我已经研究了好几天,尽管搜索了无数次,却还是找不到解决方案。

我在一个 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”都不会报告问题。

亚历克斯

相关内容