mbox形式のMailboxからMaildir形式への変換
mbox形式からMaildir形式への変換に、mb2mdやperfect_maildir.plという
スクリプトを使用したりしますが、IMAPではなくPOP3で使用していると
UIDLが変わってしまう為、次回のメール受信時にサーバ上に保存していた
メールを再度受信する事になります。
1000件とか保存していると悲しい事になるので、perfect_maildir.pl用に
uidlを変更しない様にする(Maildir/dovecot_uidlファイルを作成する)
パッチを作ってみました。
uidlフォーマットを"%v.%u"で使用している事を前提としています。
--- perfect_maildir.pl.orig 2004-11-01 04:55:03.000000000 +0900 +++ perfect_maildir.pl 2007-11-12 08:01:48.000000000 +0900 @@ -60,6 +60,7 @@ my $time = time; my $date; my $delivered_time; +my $uidvalidity = ''; repeat: @@ -67,6 +68,9 @@ my $headers = ''; my $flags = ''; my $subject = ''; +my $ximap = ''; +my $ximapbase = ''; +my $uid = ''; while (my $line = <STDIN>) { # detect end of headers last if $line eq "\n"; @@ -85,6 +89,9 @@ $flags .= $1 if $line =~ /^Status: ([A-Z]+)/; $flags .= $1 if $line =~ /^X-Status: ([A-Z]+)/; $subject = $1 if $line =~ /^Subject: (.*)$/; + $ximap = $1 if $line =~ /^X-IMAP: (.*) .*$/; + $ximapbase = $1 if $line =~ /^X-IMAPbase: (.*) .*$/; + $uid = $1 if $line =~ /^X-UID: (.*)$/; } $num++; @@ -113,6 +120,16 @@ if (($num == 1 and $subject eq "DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA") || (!$headers)) { $file = '/dev/null'; $num--; + $uidvalidity = $ximap; +} + +if ($num == 1 and $subject ne "DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA" and $uid ne '') { + if ($ximapbase ne '') { + $uidvalidity = $ximapbase; + } + open (FILE, ">$maildir/dovecot-uidlist"); + print FILE "1 $uidvalidity $uid\n"; + close (FILE); } open(FILE, ">$file");