Чому необхідно витягувати зображення з електронних листів?

Електронні листи (MSG, EML) часто містять важливі візуальні елементи, такі як зображення, надіслані клієнтами, рекламні банери, вбудовані HTML-зображення та фотографії в додатках. Автоматизація витягання дозволяє вам:

  • Зберігайте фотографії з електронних листів без ручних зусиль.
  • Обробляти електронні листи оптом
  • Скачайте вбудовані та 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 (Ідентифікатор клієнта та секрет клієнта).
  • .NET 6.0+ встановлено.
  • Visual Studio або сумісна IDE.
  • Пакет NuGet: GroupDocs.Parser-Cloud

Встановіть через NuGet

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

Витягти зображення з електронної пошти, використовуючи C# .NET

Нижче наведено повний приклад C#, який демонструє, як завантажити файл електронної пошти (EML або MSG), викликати API Images для вилучення зображень з електронної пошти та завантажити отримані фотографії локально. Це вирішує такі випадки використання, як збереження картинки з електронної пошти та завантаження фотографій з електронної пошти.

Крок 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);

tep 3 — Extract Images:

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)
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.
  • Великі електронні листи — для дуже великих або багатьох зображень, віддавайте перевагу виходу в хмарне сховище та пакетним завантаженням.
  • Дозволи — перевірте, чи правильні облікові дані API та StorageName (наприклад, internal).

Висновок

Ця стаття показала, як витягувати зображення з файлів електронної пошти (.eml та .msg), як зберігати фотографії з електронної пошти програмно та як завантажувати вбудовані та вкладені зображення, використовуючи GroupDocs.Parser Cloud SDK для .NET.

Схожі статті

Ми настійно рекомендуємо ознайомитися з наступними статтями, щоб дізнатися більше про:

Поширені запитання (FAQ)

  1. Чи можу я витягти вбудовані фото з електронних листів? Так, API автоматично витягує вбудовані та вбудовані зображення.

  2. Чи працює це з .msg (Outlook) файлами? Так — формати MSG та EML підтримуються.

  3. Чи можу я витягти лише прикріплені фотографії? Так, параметри фільтрації дозволяють вилучення лише прикріплень.

  4. Які формати зображень підтримуються? JPG, PNG, BMP, GIF, TIFF та інші поширені типи зображень.

  5. Чи є безкоштовний пробний період? Так. Ви можете створити безкоштовний обліковий запис і отримати 150 запитів до API щомісяця.