公開日: 2025年7月19日
.eml ファイルとは、メールデータをそのまま保存したファイル形式で、多くのメールソフトやサーバーが対応しています。
しかし .eml は MIME 形式で構成されており、そのままでは人間にとって読みにくい形式です。
本記事では、C# と .NET で .eml ファイルから本文テキストを抽出する方法を、人気のライブラリ MimeKit を使って解説します。
MimeKit は、.NET 環境で MIME メールを解析・作成できる高機能ライブラリです。
SMTP/IMAP/POP3 のサポートも含まれており、メール処理では定番のライブラリです。
まずは NuGet パッケージマネージャから MimeKit をインストールします。
dotnet add package MimeKit
または、Visual Studio の「NuGet パッケージの管理」から「MimeKit」で検索してインストールしてください。
以下は、MimeKit を使って .eml ファイルから本文テキストを抽出する C# のサンプルコードです。
using System;
using System.IO;
using MimeKit;
class Program
{
static void Main()
{
string emlPath = @"output_one_mail\mail_283257.eml";
// EMLファイルを読み込んでパース
using var stream = File.OpenRead(emlPath);
var message = MimeMessage.Load(stream);
// 件名の出力
Console.WriteLine("件名: " + message.Subject);
// 差出人と宛先
Console.WriteLine("差出人: " + message.From);
Console.WriteLine("宛先: " + message.To);
// 本文を抽出(プレーンテキスト優先)
string bodyText = message.TextBody ?? message.HtmlBody ?? "(本文なし)";
Console.WriteLine("\n本文:\n" + bodyText);
}
}
メールは以下のように複数の形式(マルチパート)で構成されていることがあります:
そのため、TextBody(テキスト)か HtmlBody(HTML)のどちらかを取得する必要があります。
HTMLメールの内容を処理したい場合は、HtmlBody を使って次のように抽出・表示・変換が可能です:
string html = message.HtmlBody;
string plainText = HtmlToPlainText(html); // HTML→テキスト変換処理を追加すると◎
※ HtmlAgilityPack を使えば、HTML からテキスト抽出も可能です。
MimeKit を使えば、添付ファイルの検出・保存も簡単です:
foreach (var attachment in message.Attachments)
{
if (attachment is MimePart part)
{
string fileName = part.FileName ?? "unknown.bin";
using var fileStream = File.Create(fileName);
part.Content.DecodeTo(fileStream);
Console.WriteLine($"添付ファイルを保存: {fileName}");
}
}
.eml ファイルの解析は一見難しそうに見えますが、MimeKit を使えば非常にシンプルに扱えます。
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了
RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて
PowerShellでGrapheme Clusterについて処理を考える
業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法
【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法
【C# .NET 8 対応】List<string> を重複なしでマージする方法|
【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き
【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet
WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法
System.Text.Json 9.0.0.0 で FileNotFoundException
C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】
C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法