🦁

Google Workspace から Microsoft 365 に移行したい!知識なさすぎ!

に公開

はじめに🌟

個人的に、Google Workspace でメールを使っていたのですが、Microsoft 365 へ移行することにしました。

「メールサーバーの移行って、DNS の設定をぴっと変えればいいんでしょ?」と軽く考えてましたが、実際にやってみると、MX レコード?POP?IMAP?あれ、てかそのままやったらデータ消えそう・・・でぴえんぴえん。

色々学んだなぁと思いつつ、記事にしました!

前提知識🌟

DNS レコード

DNS レコードを設定することで、「あるドメインをどこの IP アドレスと繋ぐか」を指示できます。

DNS レコード(ゾーンファイル)は、権威 DNS サーバー内に存在し、そのドメイン名に関連付けられた IP アドレスや、ドメインに対するリクエストを処理する方法など、ドメインに関する情報の提供を指示するものです。

参考:DNS レコードとは | Cloudflare

MX レコード

DNS レコードの一種で、MX レコードを設定することで、「ドメイン宛のメールをどこのメールサーバーに届けるか」を指示できます。

DNS の「メール交換」(MX)レコードは、電子メールをメールサーバーに誘導します。MX レコードは、電子メールメッセージが簡易メール転送プロトコル(SMTP、すべての電子メールの標準プロトコル)に従ってどのようにルーティングされるべきかを示します。(DeepL による翻訳)

参考:DNS MX レコードとは | Cloudflare

つまり、お名前.com で管理しているドメイン(例: your-domain.com)に宛てたメールを、(これまでの Google Workspace のサーバーではなく) Microsoft 365 のサーバーへ届くようにする場合、この MX レコードを Microsoft のサーバー宛に書き換える必要がある感じですね💪

POP と IMAP

POP(Post Office Protocol)

  • メールサーバーからメールをダウンロードして、ローカル(PC やスマホ)に保存する方式

IMAP(Internet Message Access Protocol)

  • メールサーバー上でメールを管理し、複数デバイスから同じメールボックスにアクセスする方式

現状〜移行まで🌟

やりたいことは、

  • メールサーバーを Microsoft 365 に切り替えたい
  • 過去のメールデータを Gmail から Outlook に移行したい

「POP でローカル保存しておいて必要な時はそこから見る」、とか「バックアップは諦めて、大事なメールだけ転送して全てを捨てる?笑」など、いくつかのアプローチを考えました。

最終的には Google Takeout → Thunderbird → Outlook でデータ移行することにしました。(もっといい方法ありそうだったなぁ。)

[Before] 現状の構成

  • ドメイン:お名前.com で取得・管理
  • メールサービス(メールサーバー):Google Workspace

[After] 移行後の構成

  • ドメイン:お名前.com で取得・管理
  • メールサービス(メールサーバー):Microsoft 365

STEP1: DNS 設定の変更(Microsoft 365 への切り替え)🌟

まず前提として、メールデータの移行とは別に、メールサーバーを Microsoft 365 に切り替えるために DNS を変更しました!!

お名前.com で MX レコード変更

  1. お名前.com の管理画面で既存の MX レコード(Google Workspace 用)を削除して、
  2. Microsoft 365 の MX レコードを追加!

STEP2: メールデータを分類🌟

Gmail から Outlook にメールデータを移行する時に、辛いなぁと思いながらメールデータを分類しました。

【辛さ①】 ファイル形式が違う

Google Takeout(各種 Google サービスのデータをまとめてダウンロードできる公式ツールらしい)でダウンロードできるのは、.mbox 拡張子のファイルです。

これは Outlook で受け付けている形式とは異なる?ぽい

【.mbox とは】

  • ファイルに複数のメールが格納されている形式
  • Unix 系のメールクライアントでよく使われるらしい
  • Outlook では直接読み込めないらしい(これが後々悲しいことに・・・)

参考:.mbox とは | IT 用語辞典 e-Words

【辛さ②】 ラベル情報がOutlookで受け付けてくれない?

Gmail のラベル機能(複数のラベルを付けて分類する)を使いまくってたので、これが移行時につらみでした。

Google Takeout でエクスポートした .mbox ファイルには、X-Gmail-Labels というヘッダーフィールドにラベル情報が入ってました。

ただ、Thunderbird 経由で .eml 形式に変換し、Outlook にインポートしても、Outlook はこのヘッダーを認識してくれないっぽい
(結果として、全てのメールが平たく展開される)

え〜〜〜ぴえんと思いました。

結果的には・・・

Google Takeout には フィルタ.json というファイルが含まれていて、Gmail で設定していた自動振り分けルールが JSON 形式で保存されているようでした。

このファイルを元に、各 .eml ファイルのヘッダー(From、To、Subject)を解析し、フィルタルールにマッチするメールを該当ラベルのフォルダに自動的に振り分ける Python スクリプトを作成しました。

このスクリプトでメールを Gmail のフィルタルールに基づいて「XXX」「YYY」のラベルごとのフォルダに分類できました。

#!/usr/bin/env python3

import json
import email
import shutil
from pathlib import Path

def load_filters(filter_path: str):
    with open(filter_path, 'r', encoding='utf-8') as f:
        return json.load(f).get('filter', [])

def matches_filter(eml_path: Path, filter_rule: dict) -> bool:
    with open(eml_path, 'r', encoding='utf-8', errors='ignore') as f:
        msg = email.message_from_file(f)

    query = filter_rule.get('query', '').lower()

    if query.startswith('from:'):
        return query[5:] in msg.get('From', '').lower()
    if query.startswith('to:'):
        return query[3:] in msg.get('To', '').lower()
    if query.startswith('subject:'):
        return query[8:] in msg.get('Subject', '').lower()

    return query in str(msg).lower()

def organize_emails(source_dir: str, output_base: str, filter_path: str):
    filters = load_filters(filter_path)
    output_path = Path(output_base)
    output_path.mkdir(parents=True, exist_ok=True)

    for eml_file in Path(source_dir).glob('*.eml'):
        for filter_rule in filters:
            if matches_filter(eml_file, filter_rule):
                labels = filter_rule.get('labelsToAdd', [])
                for label in labels:
                    label_dir = output_path / label
                    label_dir.mkdir(parents=True, exist_ok=True)
                    shutil.copy2(eml_file, label_dir / eml_file.name)
                break

def main():
    source_dir = "XXX/Takeout/すべてのメール(迷惑メール、ゴミ箱のメールを含む)_20251027-2212/すべてのメール(迷惑メール、ゴミ箱のメールを含む)"
    output_base = "XXX/organized_emails"
    filter_path = "XXX/Takeout/メール/ユーザー設定/フィルタ.json"

    organize_emails(source_dir, output_base, filter_path)

if __name__ == "__main__":
    main()

STEP3: メールデータを移行🌟

最終的に、以下の手順で Google Workspace から Outlook へ移行しました。

1. Google Takeout でメールデータをエクスポート

Google Takeoutでのメールエクスポート設定画面

  1. Google Takeout にアクセス
  2. 「選択をすべて解除」→「メール」のみにチェック
  3. エクスポート形式は .mbox 形式(これしか選べない)
  4. ファイルサイズを設定して「エクスポートを作成」
  5. ダウンロードリンクがメールで送られてくるので、ダウンロード

2. Thunderbird で .mbox ファイルを読み込む

Outlook は .mbox 形式を直接読み込めないので、メールクライアント「Thunderbird」を経由して、.emlへ変換しました!

  1. Thunderbird をダウンロード・インストール
  2. Thunderbird を起動し、適当なメールアカウントを設定
  3. ImportExportTools NG というアドオンをインストール
    • メニュー → アドオンとテーマ → 検索で「ImportExportTools NG」を探してインストール
  4. ローカルフォルダを右クリック → ImportExportTools NG → Import mbox file
  5. ダウンロードした .mbox ファイルを選択して読み込み

3. Thunderbird から .eml 形式でエクスポート

  1. インポートされたメールフォルダを右クリック
  2. ImportExportTools NG → Export all messages in the folder → EML format
  3. 保存先のフォルダを指定してエクスポート
  4. すべてのメールが個別の .eml ファイルとして保存される

4. Outlook に .eml ファイルをインポート

  1. Outlook を起動
  2. エクスポートした .eml ファイルを Outlook のメールフォルダにドラッグ&ドロップ(アナログ。w)
  3. または、.eml ファイルをダブルクリックして Outlook で開き、適切なフォルダに移動

まとめ🌟

  • DNS レコードを改めて学んだ:MX レコードとか・・・。
  • メールデータの移行をした:Gmail から Outlook へのデータ移行は、.mbox → Thunderbird → .eml → Outlook で遠回り感・・・。
  • ラベル情報の維持フィルタ.json を活用した Python スクリプトでフォルダ分類

メールってむずかしい。

そもそも Google から Outlook に移行するのにもっと簡単な方法があるんじゃなかろうかとも思いますが、普段聞き馴染みのない.mboxとか.emlとかを知れて良かったです。(HappyHappy)

参考 URL🌟

DNS・メールサーバー関連

メール形式・移行

ツール

TRUSTARTテックブログ

Discussion