あけましておめでとうございます。2022年もよろしくお願いします。
古に作ったメールサーバーをそろそろ無くそうと思って何年経ったか忘れたけど、正月に酒のんだ勢いでMS365にお引越しした記録

移行元

古のメールサーバー にある通り、職人の手作りメールサーバーが移行元メールサーバーです。 CentOS6上で以下の組み合わせで動いていました。

  • Postfix
  • milter
  • Dovecot
  • Postfix Admin
  • Roundcube

移行先

流石に手作りは時代ではないな…と思ったりしたのでクラウド系をメインに移行条件は以下

  • 現状のサーバー維持費用と同等以下
  • オンラインストレージあるとうれしい

とは言ってもMSかGoogleくらいしか選択肢は無いので、実質2択…

年末のオンライン飲みでMSだとAzureADも使えるとか話を聞いたのと、現状Googlのサービス使いまくってるのでMS365に決定しました。
契約方法なんかはMSの資料とかに細かく記載があるので飛ばしますが、移行前にアカウント作成までは完了している必要があります。

移行方法

正直、テストメールとゴミメールしか無いメールサーバーなのでメール全消しでもOKなのですが、せっかくなので、メールデータ移行を実施してみることに。
軽くググるとimapsync で簡単!みたいな話があったので試してみました。

前提

名前通り、IMAPで同期するツールなので、imapsyncが動作している環境から移行元メールサーバーとMS365にIMAP接続できる必要があります。

imapsync

環境準備

手持ちのサーバーにインストールするのも面倒くさかったので、AWSのEC2インスタンス(t2.micro/Amazon Linux 2)を雑に作って使います。

imapsync インストール

手順はここ に記載ありました。

  sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  sudo yum install imapsync

データ移行

以下のコマンドでユーザー単位でデータを同期させることができます。

imapsync --host1 source_ip --port1 source_ip --ssl1 --authmech1 LOGIN --user1 source_user_id --password1 source_user_pw --host2 outlook.office365.com --port2 993 --ssl2 --authmech2 LOGIN --user2 MS365_user_id --password2 MS365_user_pw

コマンドの引数の意味は以下

引数 内容
–host1 移行元IMAPサーバーIPorホスト名
–port1 移行元IMAPサーバーポート番号
–ssl1 SSL利用有無
–authmech1 LOGIN,PLAIN,CRAM-MD5から選択
–user1 移行元IMAPサーバーログインID
–password1 移行元IMAPサーバーログインパスワード。パスワードは環境変数やファイルでも設定可能
–host2 移行先IMAPサーバーIPorホスト名(今回はMS365なのでoutlook.office365.comで固定値となる)
–port2 移行元IMAPサーバーポート番号(今回はMS365なので993で固定値となる)
–ssl2 SSL利用有無(今回はry)
–authmech2 LOGIN(今回はry)
–user2 MS365のログインユーザー名
–password2 “MS365のログインユーザーパスワード
–dry これを設定するとドライランとなり、動かさずにテストできる

コマンドを実行した時のカレントディレクトリにLOG_imapsyncディレクトリが作られ、ログが保存されます。

移行結果

t2.microで5万通近いメールを3時間くらいで移行できました。

ログ

Transfer started on               : Sat Jan  1 06:45:16 2022
Transfer ended on                 : Sat Jan  1 09:46:53 2022
Transfer time                     : 10897.9 sec
Folders synced                    : 12/12 synced
Messages transferred              : 48933 
Messages skipped                  : 0
Messages found duplicate on host1 : 0
Messages found duplicate on host2 : 0
Messages void (noheader) on host1 : 0
Messages void (noheader) on host2 : 0
Messages deleted on host1         : 0
Messages deleted on host2         : 0
Total bytes transferred           : 1098829930 (1.023 GiB)
Total bytes duplicate host1       : 0 (0.000 KiB)
Total bytes duplicate host2       : 0 (0.000 KiB)
Total bytes skipped               : 0 (0.000 KiB)
Total bytes error                 : 0 (0.000 KiB)
Message rate                      : 4.5 messages/s
Average bandwidth rate            : 98.5 KiB/s
Memory consumption                : 434.3 MiB
Biggest message                   : 666278 bytes (650.662 KiB)
Memory/biggest message ratio      : 683.4
Start difference host2 - host1    : -48932 messages, -1098680047 bytes (-1.023 GiB)
Final difference host2 - host1    : 0 messages, 544733636 bytes (519.498 MiB)
Detected 0 errors

ちなみに、再実行すると差分で同期されます。
データ移行完了後にMXレコードなどをMS365の指示通りに修正して移行完了です。

まとめ

  • データ移行、思ってたよりも簡単でした
  • ユーザー単位なので、実サーバーで実施する場合は一捻りいる感じ
  • MS365のサービスを使えるようにしていかないと…
  • 酔っぱらいでも移行できる!そう、imapsyncならね