我最近在备份 CentOS 7 系统后安装了 CentOS 8,在尝试重新启动并运行 cyrus-imapd 时似乎出了点问题。邮件已正确发送,但 sieve 邮件过滤器抱怨各种邮箱不存在,因此无法正确归档邮件。例如,如果我在本地网络上发送一条消息:
[root@buttercup quota]# mail [email protected]
Subject: Test Message
Test
.
EOT
邮件日志将显示:
Dec 6 12:51:39 buttercup postfix/pickup[27670]: 07FBA216825B: uid=0 from=<root>
Dec 6 12:51:39 buttercup postfix/cleanup[27810]: 07FBA216825B: message-id=<[email protected]>
Dec 6 12:51:39 buttercup postfix/qmgr[27671]: 07FBA216825B: from=<[email protected]>, size=419, nrcpt=1 (queue active)
Dec 6 12:51:39 buttercup cyrus/lmtp[27814]: sieve runtime error for jim id <[email protected]>: Fileinto (user/jim/System Messages): Mailbox does not exist
Dec 6 12:51:39 buttercup cyrus/lmtp[27814]: LOSTQUOTA: unable to record change of 697 bytes and 1 messages in quota user.jim: Quota root does not exist
Dec 6 12:51:39 buttercup cyrus/lmtp[27814]: Delivered: <[email protected]> to mailbox: user.jim
Dec 6 12:51:39 buttercup cyrus/lmtp[27814]: USAGE jim user: 0.012321 sys: 0.005097
Dec 6 12:51:39 buttercup postfix/lmtp[27813]: 07FBA216825B: to=<[email protected]>, relay=localhost[127.0.0.1]:24, delay=0.27, delays=0.03/0.01/0.03/0.2, dsn=2.1.5, status=sent (250 2.1.5 Ok SESSIONID=<cyrus-27814-1575654699-2-7475442468148307411>)
Dec 6 12:51:39 buttercup postfix/qmgr[27671]: 07FBA216825B: removed
该邮箱确实存在,通过 cyradm 查看:
buttercup.home.lan> lm user/jim/System\ Messages
user/jim/System Messages (\HasNoChildren)
在安装 CentOS 8 之前,一切都运行良好。相关的(我认为)imapd.conf 条目:
defaultpartition: default
partition-default: /data/spool/imap
sievedir: /var/lib/imap/sieve
virtdomains: off
unixhierarchysep: yes
假脱机目录如下所示:
[root@buttercup jim]# ls -l /data/spool/imap/j/user/jim
-rw-------. 1 cyrus mail 336 Nov 30 17:57 cyrus.annotations
-rw-------. 1 cyrus mail 373712 Dec 6 13:01 cyrus.cache
-rw-------. 1 cyrus mail 189 Apr 19 2013 cyrus.header
-rw-------. 1 cyrus mail 23424 Dec 6 13:01 cyrus.index
-rw-------. 1 cyrus mail 112 Nov 26 05:31 cyrus.squat
drwx------. 2 cyrus mail 20480 Nov 30 17:57 'System Messages'
我已经用尽了我的故障排除技能,所以在我深入研究 cyrus/sieve 源代码以尝试确定发生了什么之前,我希望这里有人能够认识到这个问题或者发现我犯的一个简单错误。
答案1
cyrus-imapd 邮件列表中的某人提供了答案。我的 sieve 脚本中的 fileinto 操作包括用户/jim,但它应该与用户的收件箱相关,因此用户/jim不是必需的。一旦我将它们从每条规则中删除,一切就都好了。