為什麼要從電子郵件中提取圖像?
電子郵件 (MSG, EML) 通常包含重要的視覺內容,例如客戶提交的圖片、營銷橫幅、內嵌的 HTML 圖片和照片附件。自動化提取使您能夠:
- 從電子郵件中無需手動操作即可保存照片
- 批量處理電子郵件
- 下載內嵌和CID嵌入的圖片
- 增強 CRM、支援票務、自動化和檔案管理的工作流程
- 準備視覺數據以進行分析和處理
這篇文章回答了一些常見問題,例如如何從電子郵件保存照片、如何保存電子郵件中的照片,以及如何使用 .NET REST API 從電子郵件下載圖片。
電子郵件圖片提取 API
使用 GroupDocs.Parser Cloud SDK for .NET,您可以解析 EML 和 MSG 文件並提取它們包含的每種類型的圖像,包括:
支援的格式:
- 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
從電子郵件中提取圖片使用 C# .NET
以下是一個完整的 C# 範例,顯示如何上傳電子郵件檔案(EML 或 MSG),調用圖片 API 從電子郵件中提取圖片,並將結果照片下載到本地。這解決了如何從電子郵件中保存圖片和電子郵件照片下載的用例。
步驟 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. 呼叫 Images 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 的功能而不需要寫一行代碼,您可以考慮使用我們的免費在線 Email Image Extractor 工具。它是基於 GroupDocs.Parser Cloud API 開發的,能夠讓您保存電子郵件照片。

故障排除與除錯
指定的鍵不存在” — 檢查 API 返回的確切img.Path值。如果返回的路徑已經包含OutputPath`,則不要在前面加上它。- 沒有找到圖像 — 請確保電子郵件實際包含支持的圖像類型並檢查嵌套的 MIME 部分。
- 大型電子郵件 — 對於非常大的或多張圖片,建議使用雲端儲存輸出和批量下載。
- 權限 — 驗證 API 憑證和
StorageName(例如,internal)是否正確。
結論
這篇文章展示了如何從電子郵件檔案(.eml 和 .msg)中提取圖像,如何以程式化的方式保存照片,以及如何使用 GroupDocs.Parser Cloud SDK for .NET 下載內嵌和附加的圖片。
相關文章
我們強烈建議您參閱以下文章以了解更多:
常見問題 (FAQs)
我可以從電子郵件中提取內嵌照片嗎? 是的,API 自動提取內聯和嵌入的圖像。
這是否適用於 .msg (Outlook) 文件? 是的 — 支援 MSG 和 EML 格式。
我可以只提取附加的照片嗎? 是的,過濾選項允許僅提取附件。
支援哪些圖片格式? JPG、PNG、BMP、GIF、TIFF 和其他常見的圖像類型。
是否有免費試用? 是的。您可以創建一個免費帳戶並獲得每月 150 次 API 呼叫。
