📩フォルダにコピーした複数のOutlookメール本文を“全部まとめて”コピーする方法🧩✨

Outlookのメール(.msg / .eml)をフォルダに保存したはいいけど、本文を1通ずつ開いてコピーするのは地獄…😇
この記事では、フォルダ内の複数メール本文を一括でまとめて抽出→1つのテキストに結合→コピーできる方法を、コマンド中心でわかりやすく紹介します💡📌

「メールをまとめて抽出できたら、次は“探せる状態”にすると仕事が爆速です🚀」


✅この記事でできるようになること(ベネフィット)🌈✨

  • 📦 フォルダ内のメール本文を全件まとめて抽出
  • 🧾 本文を1つのファイルに結合して管理できる
  • 📋 最終的に全文を丸ごとコピーして、ドキュメント化・共有・検索が楽になる
  • 🔎 監査・引き継ぎ・ナレッジ化など、**“後で困らない状態”**を作れる

🧠まず確認:ファイル形式で方法が変わるよ🔍📁

✅よくある保存形式🎯

  • 📌 .msg:Outlookから「名前を付けて保存」した形式(Windows + Outlook向き)
  • 📌 .eml:メール形式の標準(Outlook以外でも扱いやすい)
  • ⚠️ .pst:Outlookデータファイル(今回の「フォルダにコピー」方式とは別ルート)

🟦【方法1】.msg を一括抽出する(PowerShell + Outlook)💻📩

✅向いてる人🙋‍♂️

  • Windowsで作業してる🪟
  • Outlookがインストールされている📮
  • .msg がフォルダに大量にある📦

🟣1つのテキストに結合して保存する(おすすめ)🧾✨

以下を PowerShell に貼り付けて実行します🔧
$folder$out だけ自分の環境に合わせてOKです✅)

# ===== 設定(ここだけ変更OK)=====
$folder = "C:\MailExport"          # .msgが入ってるフォルダ
$out    = "C:\MailExport\all_mail_bodies.txt"

# ===== 処理 =====
$ol = New-Object -ComObject Outlook.Application
$session = $ol.Session

# 出力ファイルを初期化(UTF-8)
"" | Out-File -FilePath $out -Encoding utf8

Get-ChildItem -Path $folder -Filter *.msg -File | Sort-Object Name | ForEach-Object {
    $path = $_.FullName

    # .msgを開く
    $item = $session.OpenSharedItem($path)

    # 仕切り+メタ情報+本文(プレーンテキスト)
    @(
        "============================================================"
        "FILE: $($_.Name)"
        "SUBJECT: $($item.Subject)"
        "FROM: $($item.SenderName)"
        "RECEIVED: $($item.ReceivedTime)"
        "------------------------------------------------------------"
        $item.Body
        ""
    ) | Out-File -FilePath $out -Append -Encoding utf8

    # 後始末
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($item) | Out-Null
}

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($session) | Out-Null
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($ol) | Out-Null

Write-Host "✅ DONE -> $out"

🟣抽出した全文を“そのままコピー”する📋✨

作成された all_mail_bodies.txt丸ごとクリップボードへ入れます🧠📎

Get-Content "C:\MailExport\all_mail_bodies.txt" -Raw | Set-Clipboard

🟡.msg がHTMLメールで「本文が空」になる時の対策🛠️⚠️

一部メールは Body が空で、HTMLBody だけに入っている場合があります😵
その場合は本文部分を $item.HTMLBody に差し替えればOKです✅

  • ✅ そのままHTMLで出してよければ:$item.HTMLBody
  • ✅ HTMLタグを消して綺麗にしたいなら:後述の「整形」へ🧼✨

🟩【方法2】.eml を一括抽出する(Python)🐍📩

✅向いてる人🙋‍♀️

  • .eml 形式で保存されている📁
  • Outlookに依存せず処理したい🧩
  • HTML/テキストを柔軟に扱いたい🔧

🟣.eml を全件まとめて1ファイルへ🧾✨

import os
from email import policy
from email.parser import BytesParser

folder = r"C:\MailExport"
out = r"C:\MailExport\all_mail_bodies.txt"

def get_body(msg):
    # text/plain優先、なければtext/html
    if msg.is_multipart():
        for part in msg.walk():
            if part.get_content_type() == "text/plain":
                return part.get_content()
        for part in msg.walk():
            if part.get_content_type() == "text/html":
                return part.get_content()
        return ""
    return msg.get_content()

with open(out, "w", encoding="utf-8") as wf:
    for name in sorted(os.listdir(folder)):
        if not name.lower().endswith(".eml"):
            continue
        path = os.path.join(folder, name)
        with open(path, "rb") as f:
            msg = BytesParser(policy=policy.default).parse(f)

        wf.write("="*60 + "\n")
        wf.write(f"FILE: {name}\n")
        wf.write(f"SUBJECT: {msg.get('subject','')}\n")
        wf.write(f"FROM: {msg.get('from','')}\n")
        wf.write(f"DATE: {msg.get('date','')}\n")
        wf.write("-"*60 + "\n")
        wf.write(get_body(msg) or "")
        wf.write("\n\n")

print("✅ DONE ->", out)

🧼抽出した本文を“読みやすく整える”コツ📖✨

🟣あとから困らない整理ルール🧠📌

  • 🏷️ 件名・送信者・受信日を付けておく(検索が楽🔎)
  • 🧱 区切り線を入れる(メールの境界が明確👀)
  • 📁 1ファイルにまとめる(共有・バックアップが簡単📦)
  • 🔐 機密情報を扱う場合は出力先と権限に注意(漏えい防止🛡️)

🧯よくあるトラブルと解決策(詰まりポイント)🚧⚙️

🟣PowerShellでOutlookが動かない😵

🟦原因あるある

  • Outlook未インストール📮❌
  • 32bit/64bitの不整合🧩
  • セキュリティ制御や権限不足🔐

🟩対策

  • Outlookが起動できるか確認✅
  • PowerShellを「管理者」で実行(必要な場合)🛡️
  • 可能なら .eml にしてPythonで処理するのも手💡🐍

🟣本文が空っぽになる😭

🟦原因

  • HTMLメールで Body が空(.msgで起きがち)📄❌

🟩対策

  • .msgHTMLBody を使う✅
  • あるいは .eml 化してPythonで抽出する✅

❓FAQ(絵文字付き)💬✨

❓Q1:抽出した本文を“全部コピー”する最短手順は?📋⚡

.msgなら、本文を1ファイルに出力したあとに
🧷 Get-Content -Raw | Set-Clipboard で一発コピーできます💡

❓Q2:メールの添付ファイルも一緒に取りたい📎🗂️

✅ 可能です🧩
ただし添付抽出は .msg.eml で方法が変わり、処理も少し長くなるため、本文抽出ができた後に拡張するのが安全です🔧✨

❓Q3:1通ずつ別ファイルに保存もできる?📄📁

✅ できます🙆‍♂️
結合ではなく「1通=1txt」に出すように変更可能です。運用ルール(監査・引き継ぎ・案件別など)に合わせると後で爆速になります🚀

❓Q4:日本語が文字化けすることがある…🌀

.eml はエンコードが混在しやすいので、Pythonで policy=policy.default を使うのが基本的に安定です🐍✨
.msg は Outlook 側が扱うので比較的文字化けしにくい傾向です📮

❓Q5:会社PCでも安全に使える?🏢🛡️

✅ 出力先フォルダの権限・共有設定・バックアップ先を確認すれば安全性が上がります🔐
機密情報が含まれる場合は、暗号化やアクセス制限も検討すると安心です✅✨


🎯まとめ:メール本文の一括コピーは“結合→コピー”が最強💪📩

  • 📌 .msgならPowerShell + Outlookが手軽で強い
  • 📌 .emlならPythonが柔軟で応用しやすい
  • 📌 どちらも「1ファイルに結合」すると、検索・共有・再利用が超楽になる🧠✨
あざらし

はじめまして、あざらしです。 フリーターからエンジニア会社へ就職し、 現在はフリーランスのシステムエンジニアとして働いています。 本業のエンジニア業のかたわら、 ✍️ ブログ運営 と「収入の柱を増やす挑戦」を少しずつ続けています。 フリーター時代から比べると、 段階的に収入が増えていくのを実感できるのが素直にうれしい今日この頃。 このブログでは、日々の気づき・体験談 IT・ガジェット・ゲーム系の話 「調べて分かったこと」を噛み砕いた解説 などを中心に、ジャンルに縛られない雑記ブログとして発信しています。 「自分と同じように悩んでいる人のヒントになればいいな」 そんな気持ちで更新中です。 👉 プロフィール詳細は、名前「あざらし」をクリックしてください