Dovecot 禁用 zlib 压缩并解压缩现有消息

Dovecot 禁用 zlib 压缩并解压缩现有消息

将 dovecot 升级到 2.1.7 (wheezy) 后,邮箱索引文件似乎损坏了。通常,dovecot 应该会自动修复它们,但由于 zlib 压缩,它无法确定正确的邮件大小。

Error: Corrupted index cache file ...
Input/output error (FETCH for mailbox INBOX UID ...
Maildir filename has wrong S value ...

现在我想完全禁用 zlib 插件并解压现有消息。使用 dsync 的尝试失败,因为 dsync 根本不解压它们。

有什么建议可以解决它吗?

答案1

#!/bin/bash 
IFS=$'\n'

for i in $(find /var/vmail -type f); do

    if file "$i" |grep gzip >/dev/null; then
#       echo "Extracting GZIP:" "$i" 
        mv "$i" "$i".gz
        gunzip "$i".gz

    elif file "$i" |grep bzip2 >/dev/null; then
#       echo "Extracting BZIP2:" "$i"
        bunzip2 -q "$i"
        mv "$i".out "$(echo $i |sed 's/.out//')"
     fi

done

答案2

就我而言,邮件大小由文件名中的“,S=12345”属性决定。他们提供了一个 Perl 脚本,可以递归扫描一个或多个邮件目录,并可以选择提取 zlib 压缩文件,确定实际邮件大小,并将其写入文件名中。

我指的是在这里找到的信息: https://www.dovecot.org/list/dovecot/2013-January/087953.html

该脚本可从以下网址获取: https://www.dovecot.org/tools/maildir-size-fix.pl

(编辑:此处镜像 v1.1,以防此链接离线):https://tubemail.de/maildir-size-fix.pl.txt

您可能必须更改脚本中的某些配置变量或确定哪些参数可用 - 至少我自己没有找到有关脚本用法的文档,但脚本开头的配置相当容易理解。

对我来说,它就像魔法一样有效,到目前为止没有发现任何缺陷。

编辑:命令行使用参数位于配置变量后面的注释中。因此,要扫描 maildir/home/myuser/.maildir/并更正所有邮件大小,您必须运行 ./maildir-size-fix.pl -a -f -c -r /home/myuser/.maildir/ where

  • -a如果缺少则添加尺寸
  • -f如果尺寸不对,请更正
  • -c检查文件是否被压缩,如果是,则提取文件以确定正确的大小
  • -r告诉脚本递归运行所有子文件夹

您需要安装gunzipbunzip2二进制文件才能使后者工作;此外,catwc需要awk安装、和,所有主流 Linux 发行版都应该如此。

相关内容