¿Por qué extraer imágenes de correos electrónicos?

Los correos electrónicos (MSG, EML) a menudo contienen elementos visuales importantes, como imágenes enviadas por los clientes, pancartas de marketing, imágenes HTML en línea y archivos adjuntos de fotos. La automatización de la extracción le permite:

  • Guarda fotos de correos electrónicos sin esfuerzo manual
  • Procesar correos electrónicos en lote
  • Descargar imágenes en línea y embebidas en CID
  • Mejorar los flujos de trabajo para CRM, tickets de soporte, automatización y archivo
  • Prepare visual data for analysis and processing

Este artículo responde a preguntas comunes como cómo guardar una foto del correo electrónico, cómo guardar fotos del correo electrónico y cómo descargar una imagen del correo electrónico utilizando la API REST de .NET.

API de Extracción de Imágenes de Correo Electrónico

Usando GroupDocs.Parser Cloud SDK for .NET, puedes analizar archivos EML y MSG y extraer todo tipo de imágenes que contengan, incluyendo:

  • Inline embedded images (Base64 / CID)
  • Imágenes HTML referenciadas por CID
  • Fotos adjuntas (JPG, PNG, GIF, BMP, TIFF)

Formatos compatibles:

  • EML — Archivos de correo electrónico estándar RFC822.
  • MSG — mensajes de correo electrónico de Microsoft Outlook.

Requisitos previos

  • Una cuenta de GroupDocs Cloud (ID de cliente y secreto de cliente).
  • .NET 6.0+ instalado.
  • Visual Studio o un IDE compatible.
  • Paquete de NuGet: GroupDocs.Parser-Cloud

Instalar a través de NuGet

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

Extraer imágenes de correos electrónicos usando C# .NET

A continuación se muestra un ejemplo completo en C# que muestra cómo cargar un archivo de correo electrónico (EML o MSG), llamar a la API de Imágenes para extraer imágenes del correo electrónico y descargar las fotos resultantes localmente. Esto resuelve casos de uso como cómo guardar una imagen del correo electrónico y la descarga de fotos del correo electrónico.

Paso 1 — Inicializar la API:

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

Paso 2 — Configurar información y opciones del archivo ZIP:

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

tep 3 — Extraer Imágenes:

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

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

// Rutas locales y en la nube
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. Subir archivo de correo electrónico a almacenamiento en la nube
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. Preparar solicitud de extracción de imágenes
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);

// 4. Llama a la API de imágenes para extraer imágenes en línea/adjuntas
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. Descargar imágenes extraídas de almacenamiento en la nube a una carpeta local (seguro para macOS)
Directory.CreateDirectory(localOutputDir);

foreach (var img in imagesResponse.Images)
{
    // Normalizar la ruta devuelta y la carpeta de salida para evitar la duplicación
    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.");

Notas sobre macOS y rutas de la nube

  • No utilices Path.Combine para construir claves de almacenamiento en la nube. Usa separadores de barra diagonal (/) al componer claves S3/almacenamiento de objetos.
  • Utiliza Path.Combine solo para rutas del sistema de archivos local (guardando archivos descargados en macOS).
  • El código anterior normaliza img.Path devuelto por la API y evita segmentos de carpeta duplicados como extracted-email-images/extracted-email-images/....

Extraer Imágenes de Correo Electrónico usando cURL

Alternativamente, si prefieres la interfaz de línea de comandos (CLI), puedes llamar a la API REST directamente.

Paso 1 — Generar Token de Acceso El primer paso en este enfoque es generar un token de acceso JWT basado en las credenciales del cliente.

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

La respuesta devuelve un array de registros de imágenes extraídas con sus rutas en la nube; descárguelas utilizando la API de archivos o URLs firmadas.

Prueba el Extractor de Imágenes de Correo Electrónico en Línea

Para probar las capacidades de la API REST sin escribir una sola línea de código, puedes considerar usar nuestra herramienta gratuita en línea Email Image Extractor. Se desarrolla sobre la API de GroupDocs.Parser Cloud y te permite guardar fotos de correos electrónicos.

extract email images

Resolución de problemas y depuración

  • Specified key does not exist” — inspect the exact img.Pathvalues returned by the API. Do not prependOutputPath` if the returned paths already include it.
  • No se encontraron imágenes — asegúrese de que el correo electrónico contenga tipos de imagen compatibles y revise las partes MIME anidadas.
  • Correos electrónicos grandes — para imágenes muy grandes o muchas, prefiera la salida de almacenamiento en la nube y descargas por lotes.
  • Permisos — verifique que las credenciales de la API y StorageName (por ejemplo, internal) sean correctas.

Conclusión

Este artículo mostró cómo extraer imágenes de archivos de correo electrónico (.eml y .msg), cómo guardar fotos de un correo electrónico de forma programática y cómo descargar imágenes en línea y adjuntas utilizando GroupDocs.Parser Cloud SDK para .NET.

Artículos Relacionados

Recomendamos encarecidamente visitar los siguientes artículos para aprender más sobre:

Preguntas Frecuentes (FAQs)

  1. ¿Puedo extraer fotos en línea de correos electrónicos? Sí, la API extrae automáticamente imágenes en línea y embebidas.

  2. ¿Funciona esto con archivos .msg (Outlook)? Sí: los formatos MSG y EML son compatibles.

  3. ¿Puedo extraer solo las fotos adjuntas? Sí, las opciones de filtrado permiten la extracción solo de archivos adjuntos.

  4. ¿Qué formatos de imagen son compatibles? JPG, PNG, BMP, GIF, TIFF y otros tipos de imagen comunes.

  5. ¿Hay una prueba gratuita? Sí. Puedes crear una cuenta gratuita y obtener 150 llamadas a la API mensuales.