- Tại sao lại trích xuất hình ảnh từ email?
- API trích xuất hình ảnh từ Email
- Trích xuất hình ảnh từ ZIP bằng C# .NET
- Trích xuất hình ảnh email bằng cURL
- Hãy thử Trình trích xuất hình ảnh email trực tuyến
Tại sao phải trích xuất hình ảnh từ email?
Emails (MSG, EML) thường chứa các hình ảnh quan trọng như hình ảnh do khách hàng gửi, băng rôn tiếp thị, hình ảnh HTML trong văn bản, và các tệp đính kèm ảnh. Tự động hóa việc trích xuất cho phép bạn:
- Lưu ảnh từ email mà không cần nỗ lực thủ công
- Xử lý email hàng loạt
- Tải xuống hình ảnh nhúng inline và CID.
- Cải thiện quy trình làm việc cho CRM, vé hỗ trợ, tự động hóa và lưu trữ
- Chuẩn bị dữ liệu hình ảnh để phân tích và xử lý
Bài viết này trả lời các câu hỏi phổ biến như cách lưu ảnh từ email, cách lưu ảnh email, và cách tải xuống hình ảnh từ email bằng cách sử dụng .NET REST API.
Email Image Extraction API
Sử dụng GroupDocs.Parser Cloud SDK for .NET, bạn có thể phân tích các tệp EML và MSG và trích xuất mọi loại hình ảnh mà chúng chứa, bao gồm:
- Hình ảnh nhúng theo dòng (Base64 / CID)
- Hình ảnh HTML tham chiếu CID
- Các ảnh đính kèm (JPG, PNG, GIF, BMP, TIFF)
Các định dạng được hỗ trợ:
- EML — Tệp email chuẩn RFC822.
- MSG — Thông điệp email Microsoft Outlook.
Điều kiện tiên quyết
- Tài khoản GroupDocs Cloud (Client ID & Client Secret).
- .NET 6.0+ đã được cài đặt.
- Visual Studio hoặc IDE tương thích.
- Gói NuGet:
GroupDocs.Parser-Cloud
Cài đặt qua NuGet
dotnet add package GroupDocs.Parser-Cloud --version 25.7.0
Trích xuất hình ảnh từ Email bằng C# .NET
Dưới đây là một ví dụ hoàn chỉnh bằng C# cho thấy cách tải lên một tệp email (EML hoặc MSG), gọi API Hình ảnh để trích xuất hình ảnh từ email và tải xuống các bức ảnh kết quả về máy tính. Điều này giải quyết các trường hợp sử dụng như cách lưu hình ảnh từ email và tải xuống ảnh từ email.
Bước 1 — Khởi tạo API:
var config = new Configuration("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
var parserApi = new ParserApi(config);
Bước 2 — Đặt thông tin & tùy chọn tệp ZIP:
var fileInfo = new FileInfo { FilePath = "source.eml" };
var options = new ImagesOptions { FileInfo = fileInfo };
var request = new ImagesRequest(options);
Bước 3 — Trích xuất hình ảnh:
var imagesRequest = new ImagesRequest(options);
var imagesResponse = parserApi.Images(imagesRequest);
// 1. Cấu hình khách hàng API
var config = new Configuration
{
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET"
};
var parserApi = new ParserApi(config);
var fileApi = new FileApi(config);
// Các đường dẫn cục bộ và đám mây
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. Tải tệp email lên lưu trữ đám mây
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. Chuẩn bị yêu cầu trích xuất hình ảnh
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);
// 4. Gọi API hình ảnh để trích xuất hình ảnh nội tuyến/đính kèm
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. Tải hình ảnh đã trích xuất từ lưu trữ đám mây về thư mục cục bộ (an toàn cho macOS)
Directory.CreateDirectory(localOutputDir);
foreach (var img in imagesResponse.Images)
{
// Chuẩn hóa đường dẫn trả về và thư mục đầu ra để tránh trùng lặp.
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.");
Ghi chú về macOS và các đường dẫn đám mây
- Không sử dụng
Path.Combineđể xây dựng khóa lưu trữ đám mây. Sử dụng dấu gạch chéo đi tới (/) khi cấu thành khóa S3/lưu trữ đối tượng. - Sử dụng
Path.Combinechỉ cho các đường dẫn hệ thống tập tin địa phương (lưu các tệp đã tải xuống trên macOS). - Mã trên chuẩn hóa
img.Pathđược trả về bởi API và tránh các đoạn thư mục bị trùng lặp nhưextracted-email-images/extracted-email-images/....
Trích xuất hình ảnh email sử dụng cURL
Ngoài ra, nếu bạn thích CLI, bạn có thể gọi trực tiếp REST API.
Bước 1 — Tạo Mã Truy Cập Bước đầu tiên trong cách tiếp cận này là tạo ra một mã thông báo truy cập JWT dựa trên thông tin xác thực của khách hàng.
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"}"
Phản hồi trả lại một mảng các bản ghi hình ảnh đã được trích xuất cùng với đường dẫn đám mây của chúng; tải xuống chúng bằng cách sử dụng API Tệp hoặc URL có chữ ký.
Hãy thử Trình trích xuất hình ảnh email trực tuyến
Để kiểm tra khả năng của REST API mà không viết một dòng mã nào, bạn có thể xem xét việc sử dụng công cụ trực tuyến miễn phí Email Image Extractor của chúng tôi. Nó được phát triển dựa trên GroupDocs.Parser Cloud API và cho phép bạn lưu ảnh email.

Gỡ lỗi & sửa chữa
Khóa được chỉ định không tồn tại” — kiểm tra các giá trịimg.Pathchính xác được trả về bởi API. Đừng thêmOutputPath` nếu các đường dẫn trả về đã bao gồm nó.- Không tìm thấy hình ảnh — đảm bảo rằng email thực sự chứa các loại hình ảnh được hỗ trợ và kiểm tra các phần MIME lồng nhau.
- Email lớn — đối với hình ảnh rất lớn hoặc nhiều hình ảnh, hãy ưu tiên lưu trữ đám mây và tải xuống theo lô.
- Quyền hạn — xác minh thông tin đăng nhập API và
StorageName(ví dụ:internal) là chính xác.
Kết luận
Bài viết này cho thấy cách trích xuất hình ảnh từ tệp email (.eml và .msg), cách lưu ảnh từ email một cách lập trình, và cách tải xuống hình ảnh nội tuyến và đính kèm bằng cách sử dụng GroupDocs.Parser Cloud SDK cho .NET.
Các bài viết liên quan
Chúng tôi rất khuyên bạn nên tham khảo các bài viết sau để tìm hiểu thêm về:
- Trích xuất văn bản từ PowerPoint trong C# .NET
- Chuyển đổi HTML sang PDF trong C# .NET
- Trích xuất hình ảnh từ PDF trong C# .NET
Các câu hỏi thường gặp (FAQs)
Tôi có thể trích xuất ảnh inline từ email không? Có, API tự động trích xuất hình ảnh inline và nhúng.
Điều này có hoạt động với các tệp .msg (Outlook) không? Có — Định dạng MSG và EML được hỗ trợ.
Tôi có thể chỉ trích xuất các bức ảnh đính kèm không? Có, các tùy chọn lọc cho phép trích xuất chỉ đính kèm.
Các định dạng hình ảnh nào được hỗ trợ? JPG, PNG, BMP, GIF, TIFF, và các loại hình ảnh phổ biến khác.
Có bản dùng thử miễn phí không? Có. Bạn có thể tạo một tài khoản miễn phí và nhận 150 cuộc gọi API hàng tháng.
