我正在尝试设置邮件服务器!一切似乎都正常(经过漫长的几天),但是当我尝试使用 IMAP 服务器阅读邮件时:
4 月 18 日 17:38:48 sd-84941 dovecot:imap(dlp):错误:打开(/data/maildir/dlp/cur/1460993401.13028_0.sd-84941:2,)失败:权限被拒绝(euid=1000(michael)egid=1000(michael)缺少 +r perm:/data/maildir/dlp/cur/1460993401.13028_0.sd-84941:2,,我们不在组 8(邮件)中,目录归 0:8 模式 = 0777 所有)
邮件在 maildir 文件夹中,但由于权限问题我无法阅读它们......
-rw-rw---- 1 root root 2363 4月18日 17:55 1460994924.16416_0.sd-84941
但是如果 chmod 777 它可以工作(但我不能每次都手动执行此操作..):
-rwxrwxrwx 1 root root 2363 4月 18 17:55 1460994924.16416_0.sd-84941:2,
发生了什么?谁授予文件权限?fetchmail、procmail 还是 dovecot?
- - - 编辑 - - -
感谢您的回答,@tripleee。我会尽量提供详细信息:
我已经安装了 sendmail、procmail、fetchmail、dovecot 和 roundcube:
Sendmail 和 Roundcube:默认安装。
Procmail:
在 /etc/procmailrc 中(我更喜欢全局配置而不是用户方式),我们有:
MAILDIR=/data/mails/
DEFAULT=$MAILDIR/
LOGFILE=/var/log/procmail
VERBOSE=on
- 获取邮件
在 /etc/fetchmailrc 中:
set syslog
set daemon 120
poll mail.interpc.fr
with nodns,
with protocol POP3,
user "dlp",
with password mypass
option keep
- 鸽舍
我已经创建了一个 vmail 用户:
sudo addgroup --gid 5000 vmail
sudo adduser --home /data/mails/ --uid 5000 --gid 5000 --shell /bin/false vmail
在 /etc/dovecot/users 中(包含 vmail 的 uid 和 gid):
dlp:{PLAIN}mypass:5000:5000::
在 /etc/dovecot/conf.d/10-auth.conf 中,我已更改为:
disable_plaintext_auth = no
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext
在 /etc/dovecot/conf.d/10-mail.conf 中:mail_location = maildir:/data/mails/
- 问题描述:邮件已复制到我的邮件文件夹,但具有 root 权限,因此 Roundcube 无法打开邮件
root@sd-84941:/home/michael# ls -al /data/mails/cur/ 共 48 drwxr--r-- 2 vmail vmail 4096 4 月 21 日 15:08。 drwxr--r-- 5 vmail vmail 4096 4 月 21 日 15:08 .. -rwxr--r-- 1 root root 29635 4月 21 13:31 1461238276.4519_0.sd-84941:2, -rwxr--r-- 1 root root 3740 4月21日 13:45 1461239150.5706_0.sd-84941:2, -rw-r--r-- 1 root root 2953 4月 21 15:04 1461243887.17704_0.sd-84941:2,
谢谢你的帮助......
答案1
如今,您的软件组合有点不寻常(即 10-20 年前相当标准)。我猜您正在使用 fetchmail 连接到 POP 服务器,然后它将邮件传递给 procmail 以将邮件传递到本地目录中。这种方法变得不寻常,部分原因是现在没有多少服务器只支持 POP,而 IMAP 允许在传递后在服务器之间移动邮件的更好选项。如果上游服务器上有使用 IMAP 的选项,请查看imap过滤器。如今,运行无法接受直接投递的邮件服务器也并不常见,您只需在上游服务器上设置邮件转发规则即可。
您可能遇到了问题,因为您使用 procmail 直接传送到本地目录,并且以 root 身份运行 procmail 进程,而 dovecot 不是以 root 身份运行的,因此 dovecot 无法读取文件。
您可以弄清楚如何以正确的用户身份运行 procmail,或者(如果以 root 身份运行)如何告诉它以正确的所有权存储文件。您可能会获得一定程度的兼容性,但例如,dovecot 无法在电子邮件到达时正确索引电子邮件,因此搜索将受到影响。
我建议你使用 dovecotdeliver
作为本地投递代理。它可能会取代 procmail,或者可能被 procmail 调用1,2。无论哪种情况,您都需要使用适当的参数 ( -d
) 来调用它,以识别您要投递给的用户。如果您使用 procmail 来决定要投递到哪个邮件文件夹,您可能希望使用该-p
参数,或者最好使用 dovecot 的筛选过滤引擎来做出这些决定。procmail 在处理系统用户而不是虚拟用户时确实处于最佳状态。
对于虚拟用户来说,Sieve 是一个比 procmail 更好的设计解决方案,尽管这是一个开放的问题,其过滤器语法不太令人愉快。多年来,我一直使用 procmail 提供良好的服务,目前我使用了一些 sieve,因为它在投递前起作用,但对于在投递后在服务器之间传输邮件,如果情况允许,我更喜欢用 编写过滤器imapfilter
。