Perché estrarre immagini dalle email?

Le email (MSG, EML) contengono spesso contenuti visivi importanti come immagini inviate dai clienti, banner di marketing, immagini HTML in linea e allegati fotografici. L’automazione dell’estrazione consente di:

  • Salva foto dalle email senza sforzo manuale.
  • Processa email in massa
  • Scarica immagini inline e incorporate CID
  • Migliora i flussi di lavoro per CRM, ticket di supporto, automazione e archiviazione
  • Preparare i dati visivi per l’analisi e l’elaborazione

Questo articolo risponde a domande comuni come come salvare una foto da un’email, come salvare foto da email e come scaricare un’immagine da un’email utilizzando l’API REST .NET.

Email Image Extraction API

Utilizzando GroupDocs.Parser Cloud SDK for .NET, puoi analizzare file EML e MSG ed estrarre ogni tipo di immagine che contengono, inclusi:

  • Immagini incorporate in linea (Base64 / CID)
  • Immagini HTML con riferimento CID
  • Foto allegate (JPG, PNG, GIF, BMP, TIFF)

Formati supportati:

  • EML — File email standard RFC822.
  • MSG — messaggi email di Microsoft Outlook.

Prerequisites

  • Un account GroupDocs Cloud (Client ID e Client Secret).
  • .NET 6.0+ installato.
  • Visual Studio o IDE compatibili.
  • Pacchetto NuGet: GroupDocs.Parser-Cloud

Installa tramite NuGet

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

Estrai immagini dalle email utilizzando C# .NET

Di seguito è riportato un esempio completo in C# che mostra come caricare un file email (EML o MSG), chiamare l’API delle immagini per estrarre immagini dall’email e scaricare le foto risultanti localmente. Questo risolve casi d’uso come come salvare immagini dall’email e download di foto da email.

Passo 1 — Inizializza l’API:

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

Passaggio 2 — Imposta informazioni e opzioni del file ZIP:

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

tep 3 — Estrarre Immagini:

var imagesRequest = new ImagesRequest(options);
var imagesResponse = parserApi.Images(imagesRequest);
// 1. Configurare il client API
var config = new Configuration
{
    ClientId = "YOUR_CLIENT_ID",
    ClientSecret = "YOUR_CLIENT_SECRET"
};

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

// Percorsi locali e cloud
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. Carica il file email su cloud storage
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. Preparare la richiesta di estrazione delle immagini
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);

// 4. Chiama l'API delle immagini per estrarre immagini in linea/allegate
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. Scarica le immagini estratte dallo storage cloud nella cartella locale (sicuro per macOS)
Directory.CreateDirectory(localOutputDir);

foreach (var img in imagesResponse.Images)
{
    // Normalizza il percorso restituito e la cartella di output per evitare duplicazioni.
    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.");

Note su macOS e percorsi cloud

  • Non utilizzare Path.Combine per costruire chiavi di archiviazione cloud. Usa i separatori a barra obliqua (/) quando componi chiavi S3/di archiviazione oggetti.
  • Usa Path.Combine solo per i percorsi del file system locale (salvare i file scaricati su macOS).
  • Il codice sopra normalizza img.Path restituito dall’API e evita segmenti di cartella duplicati come extracted-email-images/extracted-email-images/....

Estrai immagini email utilizzando cURL

In alternativa, se preferisci la CLI, puoi chiamare direttamente l’API REST.

Passo 1 — Genera Token di Accesso Il primo passo in questo approccio è generare un token di accesso JWT basato sulle credenziali del client.

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 risposta restituisce un array di record di immagini estratte con i loro percorsi nel cloud; scaricali utilizzando l’API File o URL firmati.

Prova l’Extractor di Immagini Email Online

Per testare le capacità dell’API REST senza scrivere una sola riga di codice, puoi considerare di utilizzare il nostro strumento online gratuito Email Image Extractor. È sviluppato sulla base dell’API GroupDocs.Parser Cloud e ti consente di salvare le foto delle email.

extract email images

Risoluzione dei problemi e debugging

  • Specified key does not exist” — ispeziona i valori esatti di img.Pathrestituiti dall'API. Non anteporreOutputPath` se i percorsi restituiti lo includono già.
  • Nessuna immagine trovata — assicurati che l’email contenga effettivamente tipi di immagine supportati e controlla le parti MIME annidate.
  • Email di grandi dimensioni — per immagini molto grandi o molte immagini, preferisci l’output di archiviazione cloud e i download in batch.
  • Permessi - verifica che le credenziali API e StorageName (ad esempio, internal) siano corrette.

Conclusione

Questo articolo ha mostrato come estrarre immagini da file email (.eml e .msg), come salvare foto da un’email programmaticamente e come scaricare immagini inline e allegate utilizzando il GroupDocs.Parser Cloud SDK per .NET.

Articoli Correlati

Ti raccomandiamo vivamente di visitare i seguenti articoli per saperne di più su:

Domande Frequenti (FAQ)

  1. Posso estrarre foto inline dalle email? Sì, l’API estrae automaticamente le immagini inline e incorporate.

  2. Funziona con i file .msg (Outlook)? Sì — i formati MSG ed EML sono supportati.

  3. Posso estrarre solo le foto allegate? Sì, le opzioni di filtraggio consentono l’estrazione solo degli allegati.

  4. Quali formati di immagine sono supportati? JPG, PNG, BMP, GIF, TIFF e altri tipi di immagini comuni.

  5. C’è una prova gratuita? Sì. Puoi creare un account gratuito e ottenere 150 chiamate API mensili.