Импорт писем из кеша Claws IMAP
Я пытаюсь импортировать учетную запись IMAP, состоящую из множества папок, из внутреннего кэша Claws Mail. К сожалению, 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