我所在组织的用户使用 Outlook 2010 电子邮件客户端,通过 pop3 访问 ZCS/OSE。这些客户端使用默认的“14 天后从服务器删除邮件“设置所有消息框设置如下:
- 每个邮箱存储不超过 450 Mb
- 常规消息的 TTL 为 60 天,垃圾邮件的 TTL 为 30 天。
清除活动按预期进行。但是...从管理 GUI 手动重新索引邮箱显示有 5000+(超过五千)条消息需要索引,但项目总数(邮件+日历+...)约为 300(三百或更少一点)。
此外,检查 /opt/zimbra/storage 子目录发现,那里存储的一些 .msg 文件是 2009 年的!
有些邮箱看上去已满,即使邮箱文件夹中没有任何邮件。这是因为帐户的子目录中充满了很久以前删除的旧邮件。
有人能解释一下,是否有可能真正清除过时的消息文件吗?使用 mtime 参数查找它们并删除它们看起来并不是一个好主意。不幸的是,我这样做了。但是 zimbra 在其 LDAP 服务器中存储了一些东西,并且强制“杀死”的消息仍然可见,即使由于“BLOB 丢失”错误而无法打开它们。
有什么方法可以清理 ZCS 的 LDAP 目录?
答案1
Zimbra 不会将消息元数据存储在 LDAP 上。相反,zimbra 使用 MySQL 来存储它。摘自 Zimbra wiki:帐户邮箱数据库结构
Zimbra 用途mysql数据库用于存储邮件头信息(收件人、发件人、主题、日期、已读/未读状态、标记、标签)、联系人、日历项目和任务。Zimbra 在创建 zimbra 帐户时会自动将其分配给邮箱组。邮箱组对应于位于 /opt/zimbra/db/data 中的数据库,例如 mboxgroup1、mboxgroup2 等。每个邮箱服务器最多有 100 个邮箱组。
这里的第一个任务是修复 Zimbra blob 和 MySQL 元数据之间的不一致。您可以使用名为zmblobchk
。此命令检查 Zimbra blob 存储的一致性 ( /opt/zimbra/store
)。此命令检查并记录没有匹配数据库元数据的文件的注释。它还会检查以确保文件的大小信息正确。
第二个任务是,如果 Outlook 已告诉 Zimbra 删除该消息,则找出该消息仍然存在的原因。您可以尝试检查 Zimbra 日志,也许某些 Zimbra 工作者出现错误,因此自动删除过程失败。
方便检查和重新索引的小脚本,感谢 OP
mbox=USERNAME;aa=`zmprov gmi $mbox|grep mailbox|sed -e "s/mailboxId\:\ //"`; zmblobchk -m $aa --export-dir /tmp/zmblb/ --missing-blob-delete-item start; zmprov rim $mbox start; zmprov rim $mbox status