自宅サーバのスリム化のためにメールを全てGmail for your domain (Google Apps for your domain) に移行することにしました。GmailがIMAPに対応してくれたので、ThunderbirdやOutlookを使って旧IMAPサーバからGmailにドラッグアンドドロップすれば移行できるのですが、メールが数万通あると地獄。自動化ツールはないのかと探していたところ、imapsyncというPerlのスクリプトを発見。でもドキュメントがほとんどないので、苦労しました。以下、簡単にまとめます。
ドメイン名:hoge.com
ユーザ名:foo
パスワード:bar
1.Google Appsに申し込む
独自ドメインを使っているので、Google Apps for your domainに申し込みます。
http://www.google.com/a/ から無料版を選びます。
設定等は他のサイトが詳しいので割愛。
独自ドメインを使う必要がなければ、通常のgmailのアカウントで以下を行ってください。
2.ユーザ作成
Gmailで利用するユーザを作成します。
独自ドメインの場合はコントロールパネルから新規ユーザを作成します。
http://www.google.com/a/hoge.com
3.作成したユーザでログインしてIMAPの設定をONにする
以下のURLからログインします。
http://mail.google.com/a/hoge.com
「設定」>「メール転送とPOP/IMAP」でIMAPを有効にします。
「設定」>「メール転送とPOP」となっていてIMAPが利用できない場合は、「設定」>「全般」の言語表示を「English (US)」にして「Settings」>「Forwarding and POP/IMAP」からIMAPを有効にしてください。
4.imapsyncの準備
自分はFedoraCore6上で、imapsyncを動かしました。以下、準備です。
5.パスワードファイルの準備
imapsyncにIMAPパスワードを直接渡すこともできますが、いろいろと気持ち悪いのでパスワードファイルを用意してそれをコマンド指定する方法をとります。(もちろんechoも使わないほうがよいのですが、説明のため簡略化してあります。意味のわかる人はちゃんとvi等でファイルを作成してください。)
ここでは、旧サーバパスワードもGmailのパスワードも同じ「bar」だったとします。imapsyncを配置したディレクトリで作業してください。
imapsyncで同期をかける前に旧メールサーバへのメールがGmailに転送されるようにします。
この時点ではまだDNSのMXレコードが旧サーバを向いているので、以下のようなテスト用のメールアドレスが用意されています。
foo@hoge.com.test-google-a.com
こちらにメールが転送されるようにしたあと、ただしくGmail側に転送されることを確認してください。
/etc/mail/virtusertable, /etc/aliases, .forward, .procmailrc など転送設定の方法はいろいろありますが、ここでは割愛します。
7.imapsyncの実行
それではimapsyncを実行します。途中失敗することがあるので、失敗した場合は再実行してください。自分の場合念のため数回正常終了するのを確認するまで繰り返しました。途中なぜか実行途中にもかかわらず正常終了したフリをして止まったことがありました。
ドメイン名:hoge.com
ユーザ名:foo
パスワード:bar
1.Google Appsに申し込む
独自ドメインを使っているので、Google Apps for your domainに申し込みます。
http://www.google.com/a/ から無料版を選びます。
設定等は他のサイトが詳しいので割愛。
独自ドメインを使う必要がなければ、通常のgmailのアカウントで以下を行ってください。
2.ユーザ作成
Gmailで利用するユーザを作成します。
独自ドメインの場合はコントロールパネルから新規ユーザを作成します。
http://www.google.com/a/hoge.com
3.作成したユーザでログインしてIMAPの設定をONにする
以下のURLからログインします。
http://mail.google.com/a/hoge.com
「設定」>「メール転送とPOP/IMAP」でIMAPを有効にします。
「設定」>「メール転送とPOP」となっていてIMAPが利用できない場合は、「設定」>「全般」の言語表示を「English (US)」にして「Settings」>「Forwarding and POP/IMAP」からIMAPを有効にしてください。
4.imapsyncの準備
自分はFedoraCore6上で、imapsyncを動かしました。以下、準備です。
$ wget http://www.linux-france.org/prj/imapsync/imapsyncPerlモジュールのインストールで、Mail::IMAPClientが必要になります。imapsyncが最新のMail::IMAPClientに対応していないので2.2.9を明示的に指定してインストールします。
$ chmod +x imapsync
$ sudo su -
# cpan install D/DJ/DJKERNEN/Mail-IMAPClient-2.2.9.tar.gz
5.パスワードファイルの準備
imapsyncにIMAPパスワードを直接渡すこともできますが、いろいろと気持ち悪いのでパスワードファイルを用意してそれをコマンド指定する方法をとります。(もちろんechoも使わないほうがよいのですが、説明のため簡略化してあります。意味のわかる人はちゃんとvi等でファイルを作成してください。)
ここでは、旧サーバパスワードもGmailのパスワードも同じ「bar」だったとします。imapsyncを配置したディレクトリで作業してください。
$ echo bar > old_pass6.Gmailへの転送設定
$ echo bar > gmail_pass
imapsyncで同期をかける前に旧メールサーバへのメールがGmailに転送されるようにします。
この時点ではまだDNSのMXレコードが旧サーバを向いているので、以下のようなテスト用のメールアドレスが用意されています。
foo@hoge.com.test-google-a.com
こちらにメールが転送されるようにしたあと、ただしくGmail側に転送されることを確認してください。
/etc/mail/virtusertable, /etc/aliases, .forward, .procmailrc など転送設定の方法はいろいろありますが、ここでは割愛します。
7.imapsyncの実行
それではimapsyncを実行します。途中失敗することがあるので、失敗した場合は再実行してください。自分の場合念のため数回正常終了するのを確認するまで繰り返しました。途中なぜか実行途中にもかかわらず正常終了したフリをして止まったことがありました。
./imapsync
--host1 imap.hoge.com ¥
--user1 foo ¥
--passfile1 old_pass ¥
--authmech1 LOGIN ¥
--host2 imap.gmail.com ¥
--user2 foo@hoge.com ¥
--passfile2 gmail_pass ¥
--authmech2 LOGIN ¥
--ssl2 ¥
--subscribe ¥
--exclude '\..*|public_html.*' ¥
--syncinternaldate
- --host1 旧IMAPサーバホスト名
- --user1 旧IMAPサーバユーザ名
- --passfile1 旧IMAPサーバパスワードファイル名
- --authmech1 旧IMAPサーバ認証方式(ここではLOGINを指定)
- --host2 Gmail IMAPサーバホスト名
- --user2 Gmail ユーザ名(「@ドメイン名」を含むことに注意)
- --passfile2 Gmailパスワードファイル名
- --authmech2 Gmailサーバ認証方式(ここではLOGINを指定)
- --ssl2 Gmail IMAPサーバの通信にSSLを利用することを指定
- --subscribe 購読対象のIMAPフォルダに限定
- --exclude 同期しないファイル・フォルダ名を指定
- --syncinternaldate これを指定しないとGmail内のメール受信時間が同期した時間になってしまう(指定しなくてもPOPやIMAPを使っているときは正しい時刻が表示される)
手動でGmailに移動させるとメールの数がおおすぎると、Gmailから不正に利用してると判断されてbanされます(24時間)。ツールだと問題ない? そんなことない気がするんだけど。
僕は全部シンクするまで、banされたらほっといて、4、5んちかけてやりました(笑)。
imapsyncは高速で同期かけるので、24時間かかるって事はないかも。
自分のアカウントでやった限り、1〜2時間で同期が完了しました。同期済みのメールはスキップしてくれるので、仮にbanされたとしてもそこからレジュームできます。
これからはメールの移行は可能な限りimapsync使うつもり。おすすめ(^^)
我が家の瀕死状態だったメールサーバを
Gmailに置き換えることが出来ました
感謝感謝です!!!
いちを北海道で生きてますw
おお、jamさん。お元気(?)そう&お役に立ててなによりです(^^)
それにしても、どうしてこのスクリプトの情報が少ないのかが疑問。検索かけると色々出てくるんですけど「こういうスクリプトがあります」としか書いてないんですよね。それとも自分が知らないだけ?(苦笑)
あと読み返して気づいたんですが、MXレコードの書き換えまでフォローしておいた方がよかったですね。また気が向いたら追記しておきますーw