从 Claws IMAP 缓存导入电子邮件

从 Claws IMAP 缓存导入电子邮件

我正在尝试从 Claws Mail 内部缓存中导入由许多文件夹组成的 IMAP 帐户。遗憾的是,Claws 无法通过选择根帐户导出所有文件夹。

检查 Claws 内部缓存文件夹时,每封邮件都是一个名为以下的纯文本文件:

base_path/My Account/Folder ABC/1
base_path/My Account/Folder ABC/2
base_path/My Account/Folder ABC/3
base_path/My Account/Folder ABC/4

base_path/My Account/Folder DEF/1
base_path/My Account/Folder DEF/2
base_path/My Account/Folder DEF/3

base_path/My Account/Folder X/etc...

我尝试使用不同的邮件阅读器(如 KMail 和 Balsa)导入此结构,但每次导入都失败。我只是希望所有这些邮件都易于访问和阅读。

我可以使用 Linux 上的哪种工具来导入这样的结构?

答案1

由于每封邮件只有一个文件,仅包含原始 RFC 822 格式的数据,因此只需重命名文件即可轻松转换为 Maildir++ 布局。之后,它至少应该可以被 Balsa 和 Mutt 以及大多数 IMAP 服务器读取(如果您可以直接上传文件)。

#!/usr/bin/env bash

inputroot=~/.claws-mail/imapcache

output=~/claws.maildir

find "$inputroot/" -mindepth 2 -type d | while read -r srcdir; do
    # Maildir++ uses <dir>/.a.b.c/ for subfolder hierarchy;
    # the "INBOX" itself is just <dir>/, having <dir>/{cur,new,tmp}/, but it
    # is not used during this conversion, which puts all mail in subfolders.
    folder=${srcdir#$inputroot}
    folder=/${folder#/}
    folder=${folder//./_}
    folder=${folder//"/"/.}
    dstdir=$output/$folder
    find "$srcdir" -maxdepth 1 -type f -not -name '.*' |
    while read -r srcfile; do
        if [ ! -d "$dstdir/cur" ]; then
            echo "creating: $dstdir"
            mkdir -p "$dstdir/cur" "$dstdir/new" "$dstdir/tmp"
        fi
        # in cur/, filenames are <unique>:2,<flags> (S for "seen")
        dstname="claws.${srcfile##*/}.$(stat -c %Y "$srcfile"):2,S"
        cp -a "$srcfile" "$dstdir/cur/$dstname"
    done
done

相关内容