げんの部屋

DIYなどの記録

AL-MailからThunderbirdへ移行 (文字化け対策)

今さらながらAL-MailからThunderbirdへ移行しました。

移行にはALM2THUNDERBIRDを利用させてもらいました。

komat.jp

Thunderbirdの仕様変更により、Subject,From,Toや添付ファイルのファイル名が文字化けします(jisになっているので)が、5チャンネルの情報をさらに修正したプログラムを作成して変換しました。

mevius.5ch.net

参考までに公開します。

対応できていない部分もあるかもしれません。(見る人はもういないのでは、とも思いますが)

使用にはperlが必要です。私はStrawberry Perlで実行しました。

conv_alm_header_fname.pl


# how to use
# 1. convert almail mailbox with ALM2Thunderbird.exe
# 2. rename each filename to "filename.org"
# 3. convert each org file in converted mailbox with conv_alm_header_fname.pl(this file)
#    > perl conv_alm_header_fname.pl inputfile > outputfile
use Encode;
my $header = 0 ;
my $header_ctype = 0 ;
my $header_cdpos = 0 ;
while( chomp( $_ = <> ) ) {

    # code from 5channel 
    # convert Subject / From / To Header
    if( $header ) {
        unless( $_ ) {
            $header = 0 ;
        }
        elsif( /^(Subject|From|To):/i && /\x1b/ ) {
            s/(\x1b\$.+?\x1b\([A-Z])/encode( 'MIME-Header-ISO_2022_JP', $1 )/eg ;
        }
    } else {
        $header = 1 if( /^From\s+/ ) ;
    }

    # added code
    # convert Content-type name, Content-Disposition filename
    if( /^Content-type:.*name\s*=/i && /\x1b/ ) {
        s/(\x1b\$.+?\x1b\([A-Z])/encode( 'MIME-Header-ISO_2022_JP', $1 )/eg ;
        $header_ctype = 0;
    }
    elsif( $header_ctype ) {
        if ( /name\s*=/i && /\x1b/ ) {
            s/(\x1b\$.+?\x1b\([A-Z])/encode( 'MIME-Header-ISO_2022_JP', $1 )/eg ;
        }
        $header_ctype = 0;
    }
    elsif( /^Content-type:/i ) {
        $header_ctype = 1;
    }
    elsif( /^Content-Disposition:.*filename\s*=/i && /\x1b/ ) {
        s/(\x1b\$.+?\x1b\([A-Z])/encode( 'MIME-Header-ISO_2022_JP', $1 )/eg ;
        $header_cdpos = 0;
    }
    elsif( $header_cdpos ) {
        if ( /filename\s*=/i && /\x1b/ ) {
            s/(\x1b\$.+?\x1b\([A-Z])/encode( 'MIME-Header-ISO_2022_JP', $1 )/eg ;
        }
        $header_cdpos = 0;
    }
    elsif( /^Content-Disposition:/i ) {
        $header_cdpos = 1;
    }
    print "$_\n" ;
}