Mengapa mengekstrak gambar dari email?

Email (MSG, EML) sering kali mengandung visual penting seperti gambar yang dikirimkan oleh pelanggan, spanduk pemasaran, gambar HTML dalam, dan lampiran foto. Mengotomatiskan ekstraksi memungkinkan Anda untuk:

  • Simpan foto dari email tanpa usaha manual.
  • Proses email dalam jumlah besar
  • Unduh gambar inline dan gambar yang disematkan CID
  • Tingkatkan alur kerja untuk CRM, tiket dukungan, otomatisasi, dan pengarsipan
  • Siapkan data visual untuk analisis dan pemrosesan

Artikel ini menjawab pertanyaan umum seperti bagaimana cara menyimpan foto dari email, bagaimana cara menyimpan foto email, dan bagaimana cara mengunduh gambar dari email menggunakan .NET REST API.

Email Image Extraction API

Menggunakan GroupDocs.Parser Cloud SDK untuk .NET, Anda dapat mengurai file EML dan MSG serta mengekstrak setiap jenis gambar yang mereka miliki, termasuk:

  • Gambar yang disematkan secara inline (Base64 / CID)
  • Gambar HTML yang direferensikan oleh CID
  • Foto terlampir (JPG, PNG, GIF, BMP, TIFF)

Format yang didukung:

  • EML — File email standar RFC822.
  • MSG — pesan email Microsoft Outlook.

Prasyarat

  • Akun GroupDocs Cloud (Client ID & Client Secret).
  • .NET 6.0+ terinstal.
  • Visual Studio atau IDE yang kompatibel.
  • Paket NuGet: GroupDocs.Parser-Cloud

Install melalui NuGet

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

Ekstrak Gambar dari Email menggunakan C# .NET

Berikut adalah contoh C# lengkap yang menunjukkan cara mengunggah file email (EML atau MSG), memanggil API Gambar untuk mengekstrak gambar dari email, dan mengunduh foto yang dihasilkan secara lokal. Ini menyelesaikan kasus penggunaan seperti cara menyimpan gambar dari email dan mengunduh foto email.

Langkah 1 — Inisialisasi API:

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

Langkah 2 — Atur Informasi & Opsi File ZIP:

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

tep 3 — Ekstrak Gambar:

var imagesRequest = new ImagesRequest(options);
var imagesResponse = parserApi.Images(imagesRequest);
// 1. Konfigurasi klien API
var config = new Configuration
{
    ClientId = "YOUR_CLIENT_ID",
    ClientSecret = "YOUR_CLIENT_SECRET"
};

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

// Jalur lokal dan cloud
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. Unggah file email ke penyimpanan awan
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. Siapkan permintaan ekstraksi gambar
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);

// 4. Panggil API Gambar untuk mengekstrak gambar inline/terlampir
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. Unduh gambar yang diekstrak dari penyimpanan awan ke folder lokal (aman untuk macOS)
Directory.CreateDirectory(localOutputDir);

foreach (var img in imagesResponse.Images)
{
    // Normalisasi jalur yang dikembalikan dan folder output untuk menghindari duplikasi
    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.");

Catatan tentang macOS dan jalur cloud

  • Jangan gunakan Path.Combine untuk membangun kunci penyimpanan cloud. Gunakan pemisah garis miring maju (/) saat menyusun kunci S3/penyimpanan objek.
  • Gunakan Path.Combine hanya untuk jalur sistem file lokal (menyimpan file yang diunduh di macOS).
  • Kode di atas menormalkan img.Path yang dikembalikan oleh API dan menghindari segmen folder yang duplikat seperti extracted-email-images/extracted-email-images/....

Ekstrak Gambar Email menggunakan cURL

Sebagai alternatif, jika Anda lebih suka CLI, Anda dapat memanggil API REST secara langsung.

Langkah 1 — Menghasilkan Token Akses Langkah pertama dalam pendekatan ini adalah menghasilkan token akses JWT berdasarkan kredensial klien.

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"}"

Respon mengembalikan array catatan gambar yang diekstrak dengan jalur cloud mereka; unduh menggunakan File API atau URL yang ditandatangani.

Coba Pengambil Gambar Email Online

Untuk menguji kemampuan REST API tanpa menulis satu baris kode pun, Anda dapat mempertimbangkan untuk menggunakan alat online gratis kami Email Image Extractor. Ini dikembangkan di atas GroupDocs.Parser Cloud API dan memungkinkan Anda untuk menyimpan foto email.

extract email images

Pemecahan masalah & debugging

  • Specified key does not exist” — periksa nilai img.Pathyang tepat yang dikembalikan oleh API. Jangan menambahkanOutputPath` jika jalur yang dikembalikan sudah menyertakannya.
  • Tidak ada gambar yang ditemukan — pastikan email benar-benar berisi tipe gambar yang didukung dan periksa bagian MIME yang bersarang.
  • Email besar — untuk gambar yang sangat besar atau banyak, lebih baik menggunakan output penyimpanan cloud dan unduhan batch.
  • Permissions — verifikasi kredensial API dan StorageName (misalnya, internal) adalah benar.

Kesimpulan

Artikel ini menunjukkan cara mengekstrak gambar dari file email (.eml dan .msg), cara menyimpan foto dari email secara programatik, dan cara mengunduh gambar inline dan terlampir menggunakan GroupDocs.Parser Cloud SDK untuk .NET.

Artikel Terkait

Kami sangat merekomendasikan untuk mengunjungi artikel-artikel berikut untuk mempelajari lebih lanjut tentang:

Pertanyaan yang Sering Diajukan (FAQs)

  1. Bisakah saya mengekstrak foto inline dari email? Ya, API secara otomatis mengekstrak gambar inline dan tertanam.

  2. Apakah ini berfungsi dengan file .msg (Outlook)? Ya — format MSG dan EML didukung.

  3. Dapatkah saya mengekstrak hanya foto yang terlampir? Ya, opsi penyaringan memungkinkan ekstraksi hanya lampiran.

  4. Format gambar apa yang didukung? JPG, PNG, BMP, GIF, TIFF, dan jenis gambar umum lainnya.

  5. Apakah ada uji coba gratis? Ya. Anda dapat membuat akun gratis dan mendapatkan 150 panggilan API bulanan.