ทำไมต้องดึงภาพจากอีเมล?

อีเมล (MSG, EML) มักมีภาพที่สำคัญเช่น รูปภาพที่ส่งโดยลูกค้า, แบนเนอร์การตลาด, รูปภาพ HTML ที่แสดงในเนื้อหา, และไฟล์แนบรูปภาพ การทำให้การดึงข้อมูลเป็นอัตโนมัติช่วยให้คุณ:

  • บันทึกรูปภาพจากอีเมลโดยไม่ต้องใช้ความพยายามด้วยตนเอง
  • ประมวลผลอีเมลแบบจำนวนมาก
  • ดาวน์โหลดภาพแบบ inline และ 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.

ข้อกำหนดเบื้องต้น

  • บัญชี GroupDocs Cloud (Client ID & Client Secret)
  • .NET 6.0+ ได้ติดตั้งแล้ว
  • Visual Studio หรือ IDE ที่เข้ากันได้
  • NuGet package: GroupDocs.Parser-Cloud

ติดตั้งผ่าน NuGet

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

ดึงรูปภาพจากอีเมลโดยใช้ C# .NET

ด้านล่างนี้คือตัวอย่าง C# เต็มรูปแบบที่แสดงวิธีการอัปโหลดไฟล์อีเมล (EML หรือ MSG) เรียกใช้ Images 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. เรียกใช้ 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-safe)
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/การจัดเก็บวัตถุ
  • ใช้ Path.Combine เฉพาะสำหรับเส้นทางในระบบไฟล์ท้องถิ่น (การบันทึกไฟล์ที่ดาวน์โหลดใน macOS)
  • โค้ดข้างต้นทำการปรับค่าของ img.Path ที่ส่งกลับโดย API และหลีกเลี่ยงการซ้ำซ้อนของส่วนโฟลเดอร์ เช่น extracted-email-images/extracted-email-images/....

Extract Email Images using 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 และช่วยให้คุณบันทึกรูปภาพในอีเมลได้

extract email images

การแก้ไขปัญหา & การดีบัก

  • ระบุคีย์ไม่มีอยู่” — ตรวจสอบค่าที่แน่นอนของ img.Pathที่ส่งคืนโดย API ห้ามนำOutputPath` ไปวางข้างหน้า หากเส้นทางที่ส่งคืนมีมันอยู่แล้ว
  • ไม่พบรูปภาพ — โปรดตรวจสอบว่าอีเมลมีประเภทภาพที่รองรับจริง ๆ และตรวจสอบ MIME parts ที่ซ้อนกัน
  • อีเมลขนาดใหญ่ — สำหรับภาพขนาดใหญ่หรือหลายภาพ แนะนำให้ใช้การจัดเก็บข้อมูลบนคลาวด์และดาวน์โหลดแบบชุด
  • Permissions — verify API credentials and StorageName (e.g., internal) are correct.

ข้อสรุป

บทความนี้แสดงวิธีการดึงภาพจากไฟล์อีเมล (.eml และ .msg) วิธีการบันทึกรูปภาพจากอีเมลในรูปแบบโปรแกรม และวิธีการดาวน์โหลดรูปภาพที่ฝังและแนบโดยใช้ GroupDocs.Parser Cloud SDK สำหรับ .NET

บทความที่เกี่ยวข้อง

เราแนะนำให้เยี่ยมชมบทความต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ:

คำถามที่พบบ่อย (FAQs)

  1. ฉันสามารถดึงภาพในอีเมลออกมาได้ไหม? ใช่, API จะดึงข้อมูลภาพที่ซ้อนและภาพที่ฝังไว้โดยอัตโนมัติ.

  2. ใช้งานได้กับไฟล์ .msg (Outlook) หรือไม่? ใช่ — รูปแบบ MSG และ EML ได้รับการสนับสนุน

  3. ฉันสามารถดึงเฉพาะภาพที่แนบไว้ได้หรือไม่? ใช่ ตัวเลือกการกรองช่วยให้สามารถดึงเฉพาะไฟล์แนบได้

  4. รูปแบบภาพใดบ้างที่รองรับ? JPG, PNG, BMP, GIF, TIFF และประเภทภาพทั่วไปอื่นๆ

  5. มีการทดลองใช้ฟรีหรือไม่? ใช่. คุณสามารถสร้างบัญชีฟรีและรับ 150 การเรียก API ต่อเดือน