なぜメールから画像を抽出するのか?

メール (MSG, EML) には、顧客が送信した画像、マーケティングバナー、インラインHTML画像、写真添付ファイルなどの重要なビジュアルが含まれていることがよくあります。抽出の自動化により、次のことが可能になります:

  • メールから手動での手間をかけずに写真を保存する
  • バルクでメールを処理する
  • インラインおよびCID埋め込み画像をダウンロードする
  • CRM、サポートチケット、オートメーション、およびアーカイブのワークフローを強化する
  • 視覚データの分析と処理のための準備を行います。

この記事では、メールから写真を保存する方法、メールの写真を保存する方法、.NET REST APIを使用してメールから画像をダウンロードする方法などの一般的な質問に対する回答を提供します。

Email Image Extraction API

GroupDocs.Parser Cloud SDK for .NET を使用すると、EML および MSG ファイルを解析し、それらに含まれるすべての種類の画像を抽出できます。含まれる画像の種類には、以下が含まれます:

  • インライン埋め込み画像 (Base64 / CID)
  • CID-referenced HTML images
  • 添付された写真 (JPG, PNG, GIF, BMP, TIFF)

サポートされているフォーマット:

  • EML — 標準RFC822メールファイル。
  • MSG — Microsoft Outlook のメールメッセージ。

前提条件

  • A GroupDocs Cloud account (Client ID & Client Secret).
  • .NET 6.0+ がインストールされています。
  • Visual Studio または互換性のある IDE。
  • NuGet パッケージ: GroupDocs.Parser-Cloud

NuGetを介してインストールします

dotnet add package GroupDocs.Parser-Cloud --version 25.7.0

Eメールから画像を抽出する C# .NET

以下は、メールファイル(EMLまたはMSG)をアップロードし、Images APIを呼び出してメールから画像を抽出し、結果の写真をローカルにダウンロードする方法を示す完全なC#の例です。これは、メールからの画像の保存やメール写真のダウンロードなどのユースケースを解決します。

ステップ 1 — API の初期化:

var config = new Configuration("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
var parserApi = new ParserApi(config);

ステップ 2 — ZIPファイル情報とオプションを設定:

var fileInfo = new FileInfo { FilePath = "source.eml" };
var options = new ImagesOptions { FileInfo = fileInfo };
var request = new ImagesRequest(options);

ステップ 3 — 画像を抽出する:

var imagesRequest = new ImagesRequest(options);
var imagesResponse = parserApi.Images(imagesRequest);
// 1. API クライアントを設定する
var config = new Configuration
{
    ClientId = "YOUR_CLIENT_ID",
    ClientSecret = "YOUR_CLIENT_SECRET"
};

var parserApi = new ParserApi(config);
var fileApi = new FileApi(config);

// ローカルおよびクラウドパス
var localEmailPath = "/Users/you/Downloads/message.eml"; // macOS example
var remoteEmailPath = "inbox/message.eml";
var outputFolder = "extracted-email-images"; // cloud output folder
var localOutputDir = "/Users/you/Downloads/extracted-email-images";

// 2. クラウドストレージにメールファイルをアップロードする
using (var fs = File.OpenRead(localEmailPath))
{
    var uploadRequest = new UploadFileRequest(path: remoteEmailPath, fileContent: fs);
    fileApi.UploadFile(uploadRequest);
    Console.WriteLine($"Uploaded {remoteEmailPath} to cloud storage.");
}

// 3. 画像抽出リクエストを準備する
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);

// 4. インライン/添付画像を抽出するために画像APIを呼び出します
var imagesResponse = parserApi.Images(imagesRequest);

if (imagesResponse.Images == null || imagesResponse.Images.Count == 0)
{
    Console.WriteLine("No images found inside the email.");
    return;
}

Console.WriteLine($"Found {imagesResponse.Images.Count} image(s) inside the email:");
foreach (var img in imagesResponse.Images)
{
    Console.WriteLine($"  - {img.Path} ({img.Size} bytes) [{img.MediaType}]");
}

// 5. クラウドストレージからローカルフォルダーに抽出した画像をダウンロードする(macOS対応)
Directory.CreateDirectory(localOutputDir);

foreach (var img in imagesResponse.Images)
{
    // 重複を避けるために、返されたパスと出力フォルダーを正規化します。
    var returnedPath = (img.Path ?? string.Empty).Replace("\\", "/").Trim('/');
    var normalizedOutputFolder = (outputFolder ?? string.Empty).Replace("\\", "/").Trim('/');

    string cloudImagePath;
    if (!string.IsNullOrEmpty(normalizedOutputFolder) &&
    (returnedPath.StartsWith(normalizedOutputFolder + "/") || returnedPath == normalizedOutputFolder))
    {
        cloudImagePath = returnedPath;
    }
    else if (!string.IsNullOrEmpty(normalizedOutputFolder))
    {
        cloudImagePath = $"{normalizedOutputFolder}/{returnedPath}".Trim('/');
    }
    else
    {
        cloudImagePath = returnedPath;
    }

    Console.WriteLine($"Downloading from cloud path: {cloudImagePath}");

    var downloadRequest = new DownloadFileRequest(path: cloudImagePath);
    var responseStream = fileApi.DownloadFile(downloadRequest);

    var localFileName = Path.GetFileName(returnedPath);
    var localFilePath = Path.Combine(localOutputDir, localFileName);

    using (var fsLocal = File.Create(localFilePath))
    {
        responseStream.CopyTo(fsLocal);
    }

    Console.WriteLine($"Downloaded: {localFilePath}");
}

Console.WriteLine("Email image extraction completed.");

macOS とクラウドパスに関するノート

  • クラウドストレージキーを構築するために Path.Combine を使用しないでください。S3/オブジェクトストレージキーを構成する際には、スラッシュ(/)区切りを使用してください。
  • ローカルファイルシステムパス(macOS上でダウンロードしたファイルの保存)には Path.Combine のみを使用してください。
  • 上記のコードは、APIによって返された img.Path を正規化し、extracted-email-images/extracted-email-images/.... のような重複したフォルダセグメントを回避します。

メール画像をcURLを使用して抽出する

また、CLIを好む場合は、REST APIを直接呼び出すことができます。

ステップ 1 — アクセストークンの生成 このアプローチの第一ステップは、クライアント認証情報に基づいてJWTアクセストークンを生成することです。

curl -v -X POST "https://api.groupdocs.cloud/connect/token" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded"

*Step 2 — Extract Images from ZIP

curl -v -X POST "https://api.groupdocs.cloud/v1.0/parser/images" \
-H  "accept: application/json" \
-H  "authorization: Bearer {ACCESS_TOKEN}" \
-H  "Content-Type: application/json" \
-d "{ "FileInfo": { "FilePath": "inbox/message.eml", "StorageName": "internal" }, "OutputPath": "extracted-email-images"}"

レスポンスは、クラウドパスを持つ抽出された画像レコードの配列を返します;それらをFile APIまたは署名付きURLを使用してダウンロードします。

オンラインメール画像抽出ツールを試してみてください

REST APIの機能をコードを1行も書かずにテストするために、無料のオンライン Email Image Extractor ツールの使用を検討することができます。これは、GroupDocs.Parser Cloud APIの上に開発されており、メールの写真を保存することを可能にします。

extract email images

トラブルシューティング & デバッグ

  • 「指定されたキーは存在しません」 — APIによって返された正確な img.Path 値を確認してください。返されたパスに既に OutputPath が含まれている場合は、先頭に追加しないでください。
  • 画像が見つかりません — 実際にメールがサポートされている画像タイプを含んでいることを確認し、ネストされたMIME部分を確認してください。
  • 大きなメール — 非常に大きな画像や多くの画像の場合は、クラウドストレージ出力とバッチダウンロードをお勧めします。
  • 権限 — API 認証情報と StorageName (例: internal) が正しいことを確認してください。

結論

この記事では、メールファイル(.emlおよび.msg)から画像を抽出する方法、プログラムを使ってメールから写真を保存する方法、GroupDocs.Parser Cloud SDK for .NETを使用してインラインおよび添付の画像をダウンロードする方法が示されました。

関連する記事

以下の文書を訪れることを強くお勧めします。詳細については以下をご覧ください:

よくある質問 (FAQ)

  1. メールからインライン写真を抽出できますか? はい、APIはインラインおよび埋め込まれた画像を自動的に抽出します。

  2. これは .msg (Outlook) ファイルで動作しますか? はい — MSGおよびEML形式がサポートされています。

  3. 添付された写真だけを抽出できますか? はい、フィルタリングオプションにより、添付ファイルのみの抽出が可能です。

  4. どの画像形式がサポートされていますか? JPG、PNG、BMP、GIF、TIFF、その他の一般的な画像タイプ。

  5. 無料トライアルはありますか? はい。無料アカウントを作成し、月に150回のAPIコールを取得できます。