- Por que extrair imagens de e-mails?
- API de Extração de Imagens de E-mail
- Extrair Imagens de ZIP usando C# .NET
- Extrair Imagens de Email usando cURL
- Experimente o Extrator de Imagens de Email Online
Por que extrair imagens de emails?
Emails (MSG, EML) frequentemente contêm visuais importantes, como imagens enviadas por clientes, banners de marketing, fotos em HTML inline e anexos de fotos. A automação da extração permite que você:
- Salvar fotos de emails sem esforço manual
- Processar e-mails em massa
- Baixar imagens inline e incorporadas CID
- Aprimorar fluxos de trabalho para CRM, tickets de suporte, automação e arquivamento
- Prepare visual data for analysis and processing
Este artigo responde a perguntas comuns, como como salvar uma foto do e-mail, como salvar fotos de e-mail e como baixar uma imagem do e-mail usando a API REST .NET.
API de Extração de Imagem de Email
Usando GroupDocs.Parser Cloud SDK for .NET, você pode analisar arquivos EML e MSG e extrair todo tipo de imagem que contêm, incluindo:
- Inline embedded images (Base64 / CID)
- Imagens HTML referenciadas por CID
- Fotos anexadas (JPG, PNG, GIF, BMP, TIFF)
Formatos suportados:
- EML — Arquivos de e-mail padrão RFC822.
- MSG — mensagens de email do Microsoft Outlook.
Pré-requisitos
- Uma conta do GroupDocs Cloud (ID do Cliente e Segredo do Cliente).
- .NET 6.0+ instalado.
- Visual Studio ou IDE compatível.
- Pacote NuGet:
GroupDocs.Parser-Cloud
Instale via NuGet
dotnet add package GroupDocs.Parser-Cloud --version 25.7.0
Extrair Imagens de Email usando C# .NET
Abaixo está um exemplo completo em C# mostrando como fazer o upload de um arquivo de email (EML ou MSG), chamar a API de Imagens para extrair imagens do email e baixar as fotos resultantes localmente. Isso resolve casos de uso como como salvar imagens de email e download de fotos por email.
Passo 1 — Inicializar a API:
var config = new Configuration("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
var parserApi = new ParserApi(config);
Passo 2 — Definir Informações e Opções do Arquivo ZIP:
var fileInfo = new FileInfo { FilePath = "source.eml" };
var options = new ImagesOptions { FileInfo = fileInfo };
var request = new ImagesRequest(options);
tep 3 — Extrair Imagens:
var imagesRequest = new ImagesRequest(options);
var imagesResponse = parserApi.Images(imagesRequest);
// 1. Configurar cliente API
var config = new Configuration
{
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET"
};
var parserApi = new ParserApi(config);
var fileApi = new FileApi(config);
// Caminhos locais e na nuvem
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. Carregar arquivo de e-mail para o armazenamento em nuvem
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 solicitação de extração de imagens
var fileInfo = new FileInfo { FilePath = remoteEmailPath, StorageName = "internal" };
var options = new ImagesOptions { FileInfo = fileInfo, OutputPath = outputFolder };
var imagesRequest = new ImagesRequest(options);
// 4. Chame a API de Imagens para extrair imagens em linha/ativas
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. Baixar imagens extraídas do armazenamento em nuvem para a pasta local (seguro para macOS)
Directory.CreateDirectory(localOutputDir);
foreach (var img in imagesResponse.Images)
{
// Normalizar o caminho retornado e a pasta de saída para evitar duplicação
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 e caminhos na nuvem
- Não use
Path.Combinepara construir chaves de armazenamento em nuvem. Use separadores de barra (/) ao compor chaves de S3/armazenamento de objetos. - Use
Path.Combineapenas para caminhos do sistema de arquivos local (salvando arquivos baixados no macOS). - O código acima normaliza
img.Pathretornado pela API e evita segmentos de pasta duplicados comoextracted-email-images/extracted-email-images/....
Extrair Imagens por Email usando cURL
Alternativamente, se você preferir a CLI, pode chamar a API REST diretamente.
Passo 1 — Gerar Token de Acesso O primeiro passo nesta abordagem é gerar um token de acesso JWT com base nas credenciais do 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"}"
A resposta retorna um array de registros de imagem extraídos com seus caminhos na nuvem; baixe-os usando a API de Arquivos ou URLs assinadas.
Experimente o Extrator de Imagem de Email Online
Para testar as capacidades da API REST sem escrever uma única linha de código, você pode considerar usar nossa ferramenta gratuita online Email Image Extractor. Ela é desenvolvida em cima da API GroupDocs.Parser Cloud e permite que você salve fotos de e-mail.

Solução de problemas e depuração
Chave especificada não existe” — inspecione os valores exatos deimg.Pathretornados pela API. Não adicioneOutputPath` se os caminhos retornados já o incluírem.- Nenhuma imagem encontrada — certifique-se de que o e-mail realmente contenha tipos de imagem suportados e verifique se há partes MIME aninhadas.
- E-mails grandes — para imagens muito grandes ou muitas imagens, prefira a saída de armazenamento em nuvem e downloads em lote.
- Permissões — verifique se as credenciais da API e
StorageName(por exemplo,internal) estão corretas.
Conclusão
Este artigo mostrou como extrair imagens de arquivos de email (.eml e .msg), como salvar fotos de um email programaticamente, e como baixar imagens incorporadas e anexadas usando o GroupDocs.Parser Cloud SDK para .NET.
Artigos Relacionados
Recomendamos fortemente a visita aos seguintes artigos para saber mais sobre:
- Extrair Texto do PowerPoint em C# .NET
- Converter HTML para PDF em C# .NET
- Extrair Imagens de PDF em C# .NET
Perguntas Frequentes (FAQs)
Posso extrair fotos inline de e-mails? Sim, a API extrai automaticamente imagens inline e embutidas.
Isso funciona com arquivos .msg (Outlook)? Sim — os formatos MSG e EML são suportados.
Posso extrair apenas as fotos anexadas? Sim, as opções de filtragem permitem a extração apenas de anexos.
Quais formatos de imagem são suportados? JPG, PNG, BMP, GIF, TIFF e outros tipos comuns de imagem.
Há um teste grátis? Sim. Você pode criar uma conta gratuita e obter 150 chamadas de API mensalmente.