لماذا استخراج الصور من رسائل البريد الإلكتروني؟

تحتوي الرسائل الإلكترونية (MSG, EML) غالبًا على صور مهمة مثل الصور المقدمة من العملاء، لافتات التسويق، صور HTML المضمنة، ومرفقات الصور. يتيح لك الأتمتة في الاستخراج ما يلي:

  • احفظ الصور من الرسائل الإلكترونية دون جهد يدوي
  • معالجة الرسائل الإلكترونية بكميات كبيرة
  • قم بتنزيل الصور المضمنة والصور المدمجة بتنسيق CID
  • تعزيز سير العمل لنظام إدارة علاقات العملاء، تذاكر الدعم، الأتمتة، والأرشفة
  • اعداد البيانات المرئية للتحليل والمعالجة

هذه المقالة تجيب على الاستفسارات الشائعة مثل كيفية حفظ صورة من البريد الإلكتروني، كيفية حفظ صور البريد الإلكتروني، وكيفية تنزيل صورة من البريد الإلكتروني باستخدام .NET REST API.

API استخراج الصور من البريد الإلكتروني

باستخدام GroupDocs.Parser Cloud SDK for .NET، يمكنك تحليل ملفات EML و MSG واستخراج كل نوع من الصور التي تحتوي عليها، بما في ذلك:

  • صور مدمجة مضمنة (Base64 / CID)
  • صور HTML المرتبطة بـ CID
  • صور مرفقة (JPG، PNG، GIF، BMP، TIFF)

تنسيقات مدعومة:

  • EML — ملفات البريد الإلكتروني القياسية RFC822.
  • MSG — رسائل البريد الإلكتروني من Microsoft Outlook.

المتطلبات السابقة

  • حساب GroupDocs Cloud (معرف العميل وسر العميل).
  • .NET 6.0+ مُثبت.
  • فيجوال ستوديو أو محرر تطوير متوافق.
  • حزمة NuGet: GroupDocs.Parser-Cloud

تثبيت عبر NuGet

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

استخراج الصور من البريد الإلكتروني باستخدام C# .NET

بينما هو مثال كامل بلغة C# يوضح كيفية رفع ملف بريد إلكتروني (EML أو MSG)، واستدعاء واجهة برمجة التطبيقات للصور لاستخراج الصور من البريد الإلكتروني، وتنزيل الصور الناتجة محليًا. هذا يحل حالات الاستخدام مثل كيفية حفظ صورة من البريد الإلكتروني وتنزيل صور البريد الإلكتروني.

الخطوة 1 — إعداد واجهة برمجة التطبيقات:

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. استدعاء واجهة برمجة تطبيقات الصور لاستخراج الصور المرفقة/المضمنة
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/تخزين الكائنات.
  • استخدم Path.Combine فقط لمسارات نظام الملفات المحلية (حفظ الملفات التي تم تنزيلها على macOS).
  • يقوم الكود أعلاه بتطبيع img.Path الذي توفره واجهة برمجة التطبيقات ويتجنب تكرار مقاطع المجلد مثل extracted-email-images/extracted-email-images/....

استخراج صور البريد الإلكتروني باستخدام cURL

بدلاً من ذلك، إذا كنت تفضل واجهة سطر الأوامر (CLI)، يمكنك استدعاء واجهة برمجة التطبيقات REST مباشرة.

الخطوة 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"}"

تعود الاستجابة بمصفوفة من سجلات الصور المستخرجة مع مساراتها في السحابة؛ قم بتنزيلها باستخدام واجهة برمجة تطبيقات الملفات أو عناوين URL الموقعة.

جرّب مستخرج الصور عبر البريد الإلكتروني عبر الإنترنت

لاختبار قدرات واجهة برمجة التطبيقات REST دون كتابة سطر واحد من الشيفرة، يمكنك استخدام أداتنا المجانية عبر الإنترنت Email Image Extractor. تم تطويرها على أساس واجهة برمجة التطبيقات GroupDocs.Parser Cloud وتمكنك من حفظ صور البريد الإلكتروني.

extract email images

استكشاف الأخطاء وإصلاحها والأخطاء

  • “المفتاح المحدد غير موجود” — تحقق من القيم الدقيقة img.Path التي أعادها API. لا تضف OutputPath إذا كانت المسارات المعادة تشملها بالفعل.
  • لم يتم العثور على صور - تأكد من أن البريد الإلكتروني يحتوي بالفعل على أنواع الصور المدعومة وتحقق من أجزاء MIME المتداخلة.
  • رسائل البريد الإلكتروني الكبيرة - بالنسبة لصور كبيرة جدًا أو العديد من الصور، يُفضل استخدام تخزين السحابة للإخراج وتنزيلات الدُفعات.
  • الأذونات - تحقق من أن بيانات اعتماد واجهة برمجة التطبيقات و StorageName (على سبيل المثال، internal) صحيحة.

استنتاج

هذه المقالة عرضت كيفية استخراج الصور من ملفات البريد الإلكتروني (.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 شهريًا.