چرا تصاویر را از ایمیل‌ها استخراج کنیم؟

ایمیل‌ها (MSG, EML) اغلب حاوی ویزوال‌های مهمی مانند تصاویر ارسال شده توسط مشتری، بنرهای تبلیغاتی، عکس‌های HTML درون‌خط و پیوست‌های عکسی هستند. خودکارسازی استخراج به شما این امکان را می‌دهد:

  • ذخیره عکس‌ها از ایمیل‌ها بدون تلاش دستی
  • ایمیل‌ها را به صورت انبوه پردازش کنید
  • تصاویر درون خط و تصاویر جاسازی شده CID را دانلود کنید
  • جریان‌های کار را برای CRM، تیکت‌های پشتیبانی، اتوماسیون و بایگانی بهبود دهید.
  • داده های بصری را برای تحلیل و پردازش آماده کنید.

این مقاله به سوالات رایجی مانند نحوه ذخیره یک عکس از ایمیل، نحوه ذخیره عکس‌های ایمیل و نحوه دانلود تصویر از ایمیل با استفاده از .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+ نصب شده است.
  • ویژوال استودیو یا IDE سازگار.
  • پکیج NuGet: GroupDocs.Parser-Cloud

نصب از طریق NuGet

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

تصاویر را از ایمیل با استفاده از C# .NET استخراج کنید

در زیر یک مثال کامل C# نمایش داده شده است که نحوه بارگذاری یک فایل ایمیل (EML یا MSG)، فراخوانی API تصاویر برای استخراج تصاویر از ایمیل و دانلود عکس‌های حاصل به صورت محلی را نشان می‌دهد. این راه‌حل شامل مواردی است مانند نحوه ذخیره تصویر از ایمیل و دانلود عکس ایمیل.

مرحله ۱ — راه‌اندازی 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}]");
}

// ۵. دانلود تصاویر استخراج‌شده از فضای ذخیره‌سازی ابری به پوشه محلی (امن برای 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 را که توسط API بازگشت داده می‌شود نرمال می‌کند و از تکرار بخش‌های پوشه مانند extracted-email-images/extracted-email-images/.... جلوگیری می‌کند.

ایجاد تصاویر ایمیل با استفاده از cURL

به طور alternativ، اگر به CLI ترجیح می‌دهید، می‌توانید مستقیماً API 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"}"

پاسخ یک آرایه از رکوردهای تصویر استخراج شده با مسیرهای ابری آن‌ها را برمی‌گرداند؛ آن‌ها را با استفاده از API فایل یا URLهای امضا شده دانلود کنید.

ابزار استخراج تصویر ایمیل آنلاین را امتحان کنید

به منظور آزمایش قابلیت‌های REST API بدون نوشتن حتی یک خط کد، می‌توانید از ابزار رایگان آنلاین Email Image Extractor ما استفاده کنید. این ابزار بر پایه API Cloud GroupDocs.Parser توسعه یافته است و به شما این امکان را می‌دهد که عکس‌های ایمیل را ذخیره کنید.

extract email images

عیب‌یابی و اشکال‌زدایی

  • کلید مشخص شده وجود ندارد — مقادیر دقیق img.Path که توسط API بازگشت داده شده است را بررسی کنید. اگر مسیرهای بازگشتی قبلاً شامل OutputPath هستند، آن را به آن‌ها اضافه نکنید.
  • تصویری پیدا نشد — اطمینان حاصل کنید که ایمیل واقعاً شامل انواع تصویر پشتیبانی شده است و قسمت‌های MIME تو در تو را بررسی کنید.
  • ایمیل‌های بزرگ — برای تصاویر بسیار بزرگ یا بسیاری از تصاویر، خروجی ذخیره‌سازی ابری و دانلودهای دسته‌ای را ترجیح دهید.
  • اجازه‌ها — اعتبارنامه‌های API و StorageName (به عنوان مثال، internal) را بررسی کنید که صحیح هستند.

نتیجه‌گیری

این مقاله نشان داد که چگونه می‌توان تصاویر را از فایل‌های ایمیل (.eml و .msg) استخراج کرد، چگونه می‌توان عکس‌ها را به صورت برنامه‌نویسی از یک ایمیل ذخیره کرد و چگونه می‌توان تصاویر درون‌خط و پیوست شده را با استفاده از گروه‌داکس.پارسِر Cloud SDK برای .NET دانلود کرد.

مقالات مرتبط

ما به شدت توصیه می‌کنیم که مقالات زیر را برای آشنایی بیشتر با مطالب زیر مطالعه کنید:

سوالات متداول (FAQs)

  1. آیا می‌توانم عکس‌های داخل ایمیل‌ها را استخراج کنم؟ بله، API به طور خودکار تصاویر داخلی و جاسازی شده را استخراج می‌کند.

  2. آیا این با فایل‌های .msg (Outlook) کار می‌کند؟ بله — فرمت‌های MSG و EML پشتیبانی می‌شوند.

  3. آیا می‌توانم فقط عکس‌های پیوست شده را استخراج کنم؟ بله، گزینه‌های فیلتر اجازه استخراج فقط پیوست‌ها را می‌دهند.

  4. چه فرمت‌های تصویری پشتیبانی می‌شوند؟ JPG، PNG، BMP، GIF، TIFF و سایر نوع‌های رایج تصویر.

  5. آیا یک دوره آزمایشی رایگان وجود دارد؟ بله. شما می‌توانید یک حساب رایگان ایجاد کنید و ۱۵۰ تماس API ماهانه دریافت کنید.