Pourquoi extraire des images des e-mails ?

Les e-mails (MSG, EML) contiennent souvent des éléments visuels importants tels que des images soumises par les clients, des bannières marketing, des images HTML en ligne et des pièces jointes photo. L’automatisation de l’extraction vous permet de :

  • Enregistrez des photos à partir d’emails sans effort manuel.
  • Traitez les e-mails en masse
  • Télécharger des images en ligne et intégrées CID
  • Améliorer les flux de travail pour la CRM, les tickets de support, l’automatisation et l’archivage
  • Préparer les données visuelles pour l’analyse et le traitement

Cet article répond aux questions courantes telles que comment enregistrer une photo à partir d’un e-mail, comment enregistrer des photos d’e-mail et comment télécharger une image à partir d’un e-mail en utilisant l’API REST .NET.

API d’extraction d’images par e-mail

En utilisant GroupDocs.Parser Cloud SDK for .NET, vous pouvez analyser les fichiers EML et MSG et extraire chaque type d’image qu’ils contiennent, y compris :

  • Images intégrées en ligne (Base64 / CID)
  • CID-referenced HTML images
  • Photos attachées (JPG, PNG, GIF, BMP, TIFF)

Formats supportés :

  • EML — Fichiers email standard RFC822.
  • MSG — Messages email Microsoft Outlook.

Conditions préalables

  • Un compte GroupDocs Cloud (ID client et clé secrète client).
  • .NET 6.0+ installé.
  • Visual Studio ou IDE compatible.
  • Paquet NuGet : GroupDocs.Parser-Cloud

Installer via NuGet

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

Extraire des images d’un email en utilisant C# .NET

Voici un exemple complet en C# montrant comment télécharger un fichier email (EML ou MSG), appeler l’API Images pour extraire des images de l’email et télécharger les photos résultantes localement. Cela résout des cas d’utilisation tels que comment enregistrer une image à partir d’un email et le téléchargement de photos par email.

Étape 1 — Initialiser l’API :

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

Étape 2 — Définir les informations et options du fichier ZIP :

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

tep 3 — Extraire des images :

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

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

// Chemins locaux et 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. Télécharger le fichier email sur le stockage cloud
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. Préparer la demande d'extraction d'images
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);

// 4. Appeler l'API Images pour extraire les images intégrées/jointes
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. Télécharger les images extraites de l'espace de stockage cloud vers un dossier local (sans danger pour macOS)
Directory.CreateDirectory(localOutputDir);

foreach (var img in imagesResponse.Images)
{
    // Normaliser le chemin retourné et le dossier de sortie pour éviter la duplication
    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.");

Notes about macOS and cloud paths

  • Ne pas utiliser Path.Combine pour construire des clés de stockage cloud. Utilisez des séparateurs de barre oblique (/) lors de la composition des clés S3/stockage d’objets.
  • Utilisez Path.Combine uniquement pour les chemins du système de fichiers local (enregistrement de fichiers téléchargés sur macOS).
  • Le code ci-dessus normalise img.Path renvoyé par l’API et évite les segments de dossier dupliqués comme extracted-email-images/extracted-email-images/....

Extraire des images d’email à l’aide de cURL

Alternativement, si vous préférez l’interface en ligne de commande (CLI), vous pouvez appeler l’API REST directement.

Étape 1 — Générer un jeton d’accès La première étape de cette approche consiste à générer un jeton d’accès JWT basé sur des identifiants de 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 réponse renvoie un tableau d’enregistrements d’images extraites avec leurs chemins dans le cloud ; téléchargez-les en utilisant l’API File ou des URL signées.

Essayez l’extracteur d’images d’e-mails en ligne

Pour tester les capacités de l’API REST sans écrire une seule ligne de code, vous pouvez envisager d’utiliser notre outil gratuit en ligne Email Image Extractor. Il est développé sur la base de l’API GroupDocs.Parser Cloud et vous permet de sauvegarder des photos d’emails.

extract email images

Résolution des problèmes & débogage

  • La clé spécifiée n'existe pas — inspectez les valeurs exactes img.Path retournées par l’API. Ne préfixez pas OutputPath si les chemins retournés l’incluent déjà.
  • Aucune image trouvée — assurez-vous que l’e-mail contient réellement des types d’images pris en charge et vérifiez les parties MIME imbriquées.
  • E-mails volumineux — pour des images très volumineuses ou nombreuses, préférez le stockage dans le cloud et les téléchargements par lots.
  • Permissions — vérifiez que les identifiants API et StorageName (par exemple, internal) sont corrects.

Conclusion

Cet article a montré comment extraire des images des fichiers e-mail (.eml et .msg), comment enregistrer des photos à partir d’un e-mail de manière programmatique, et comment télécharger des images en ligne et en pièce jointe en utilisant le SDK Cloud de GroupDocs.Parser for .NET.

Articles connexes

Nous recommandons vivement de consulter les articles suivants pour en savoir plus sur :

Questions Fréquemment Posées (QFP)

  1. Puis-je extraire des photos en ligne des e-mails ? Oui, l’API extrait automatiquement les images en ligne et intégrées.

  2. Cela fonctionne-t-il avec des fichiers .msg (Outlook) ? Oui — les formats MSG et EML sont pris en charge.

  3. Puis-je extraire uniquement les photos jointes ? Oui, les options de filtrage permettent l’extraction uniquement des pièces jointes.

  4. Quels formats d’image sont pris en charge ? JPG, PNG, BMP, GIF, TIFF, et d’autres types d’images courants.

  5. Y a-t-il un essai gratuit ? Oui. Vous pouvez créer un compte gratuit et obtenir 150 appels API mensuels.