imapsyncでモバメをGmailにコピーする

この話の続き。

ThunderbirdでドコモメールをGmailに自動転送する - kkobayashi_a’s blog

今までThunderbirdのフィルタ機能を使ってキャリアメールからGmailにモバメをコピーしていたけど、そのためだけに常時Thunderbirdを起動させておくのがどうもオーバースペックだなと思っていて。メモリ300~500MBくらい使ってるし。

近々Windowsを再インストールするので、せっかくだからThunderbirdを使わずコマンドラインでcronに登録できるようなものを探してみました。

どうやらimapsyncというツールで目的が達成できそう。

Official imapsync migration tool ( release 1.921 )

有料のソフトっぽいけど、GitHubで古いバージョンが公開されている。

GitHub - imapsync/imapsync: Imapsync is an IMAP transfers tool. The purpose of imapsync is to migrate IMAP accounts or to backup IMAP accounts. IMAP is one of the three current standard protocols to access mailboxes, the two other are POP3 and HTTP with webmails, webmails are often tied to an IMAP server. Upstream website is

makeの仕方がよく分からん。まあ中身はPerlスクリプトなのでそのまま実行できますね。

オプションはこんな感じ。

imapsync --host1 $HOST1 --user1 $USER1 --password1 $PASS1 --user2 $USER2 --password2 $PASS2 --gmail2 --folder INBOX --f1f2 INBOX=Mobame --nofoldersizes --nofoldersizesatend --noresyncflags --search "SENTSINCE 06-Apr-2019 OR FROM mls.ngt48.com FROM sp.hkt48.jp"

自分はGmailで"Mobame"ラベルを付けているので、--f1f2 INBOX=Mobame の設定でInboxのメールをMobameフォルダ(IMAP上ではラベルはフォルダ扱いになる)にコピーする。

--nofoldersizes --nofoldersizesatend は時短のため。

--noresyncflags はGmail側で既読にしたメールが次回のsyncで未読に戻ってしまうのを防ぐため。

--searchオプション、IMAPのsearch queryがポーランド記法らしく癖がある。モバメのアドレスを増やす場合は "OR OR FROM mls.ngt48.com FROM sp.hkt48.jp FROM mm.akb48.co.jp"という感じで書けばよい(と思う)。

おまけ(Cygwinで動かす場合)

Cygwinで動かすとpsのオプションがなんちゃらというエラーが出る。これはツール自身のメモリー使用量を "ps -o vsz" で取得しているため。

Thunderbirdを常駐させておくことに比べたらメモリー使用量なんて微々たるものなのでエラーなど無視しておいてもいいんだけど、せっかくなので直しておく。

https://github.com/imapsync/imapsync/pull/22

WindowsだけじゃなくてCygwinの場合もtasklistからメモリー使用量を取得するようにする。

実はここの修正だけでは不十分で、memory_consumption_of_pids_win32()関数内でCygwinのPID -> WindowsのPIDの変換をする必要があります。

Perlで書かれてると治すのが楽でいいわ。笑

sub memory_consumption_of_pids_win32 {
        # Windows
        my @PID = @_;
        if ( 'cygwin' eq $OSNAME ) {
                @PID = map { open my $fh, '<', "/proc/$_/winpid"; $_=<$fh>; tr/\x0A\x0D//d; $_ } @PID;
        }