Почему извлекать изображения из электронных писем?

Электронные письма (MSG, EML) часто содержат важные визуальные элементы, такие как изображения, отправленные клиентами, маркетинговые баннеры, встроенные HTML-картинки и фото вложения. Автоматизация извлечения позволяет вам:

  • Сохраните фотографии из электронных писем без ручного труда
  • Обработка электронной почты в большом объеме
  • Скачать встроенные и CID-встраиваемые изображения
  • Улучшите рабочие процессы для CRM, поддержки заявок, автоматизации и архивирования
  • Подготовьте визуальные данные для анализа и обработки

Эта статья отвечает на распространенные вопросы, такие как как сохранить фото из электронной почты, как сохранить фотографии из электронной почты и как скачать изображение из электронной почты с использованием .NET REST API.

Email Image Extraction API

Используя GroupDocs.Parser Cloud SDK for .NET, вы можете разбирать файлы EML и MSG и извлекать все типы изображений, которые они содержат, включая:

  • Встроенные изображения в строке (Base64 / CID)
  • CID-ссылающиеся HTML-изображения
  • Прикрепленные фотографии (JPG, PNG, GIF, BMP, TIFF)

Поддерживаемые форматы:

  • EML — стандартные файлы электронной почты RFC822.
  • MSG — электронные сообщения Microsoft Outlook.

Предварительные требования

  • Аккаунт GroupDocs Cloud (Client ID & Client Secret).
  • .NET 6.0+ установлен.
  • Visual Studio или совместимая среда разработки.
  • NuGet пакет: GroupDocs.Parser-Cloud

Установить через NuGet

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

Извлечение изображений из электронной почты с использованием C# .NET

Ниже приведен полный пример на C#, показывающий, как загрузить файл электронной почты (EML или MSG), вызвать 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)
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

В качестве альтернативы, если вы предпочитаете 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 и позволяет вам сохранять фотографии электронной почты.

извлечь изображения электронной почты

Устранение неполадок и отладка

  • Указанный ключ не существует” — проверьте точные значения 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 в месяц.