- 이메일에서 이미지를 추출하는 이유는 무엇인가요?
- 이메일 이미지 추출 API
- ZIP 파일에서 이미지 추출 C# .NET 사용하기
- 이메일 이미지를 cURL을 사용하여 추출하기
- 온라인 이메일 이미지 추출기를 사용해 보세요.
이메일에서 이미지를 추출하는 이유는 무엇인가요?
이메일 (MSG, EML)에는 고객 제출 이미지, 마케팅 배너, 인라인 HTML 사진 및 사진 첨부파일과 같은 중요한 시각 자료가 포함되는 경우가 많습니다. 추출 자동화는 다음을 가능하게 합니다:
- 이메일에서 사진을 수동으로 노력 없이 저장하기
- 대량으로 이메일 처리하기
- 인라인 및 CID 임베디드 이미지 다운로드
- CRM, 지원 티켓, 자동화 및 아카이빙을 위한 워크플로우를 개선하십시오.
- 시각적 데이터를 분석 및 처리하기 위해 준비합니다.
이 기사에서는 이메일에서 사진 저장하는 방법, 이메일 사진 저장하는 방법, .NET REST API를 사용하여 이메일에서 이미지 다운로드하는 방법과 같은 일반적인 질문에 대한 답변을 제공합니다.
Email Image Extraction API
GroupDocs.Parser Cloud SDK for .NET를 사용하면 EML 및 MSG 파일을 구문 분석하고 이들이 포함한 모든 유형의 이미지를 추출할 수 있습니다. 여기에는 다음이 포함됩니다:
지원되는 형식:
- EML — 표준 RFC822 이메일 파일.
- MSG — 마이크로소프트 아웃룩 이메일 메시지.
전제 조건
- 그룹독스 클라우드 계정 (클라이언트 ID 및 클라이언트 비밀).
- .NET 6.0+ 설치됨.
- 비주얼 스튜디오 또는 호환 가능한 IDE.
- NuGet 패키지:
GroupDocs.Parser-Cloud
NuGet을 통해 설치하십시오.
dotnet add package GroupDocs.Parser-Cloud --version 25.7.0
이메일에서 이미지 추출하기 C# .NET
아래는 이메일 파일(EML 또는 MSG)을 업로드하고, 이미지 API를 호출하여 이메일에서 이미지를 추출하며, 결과 사진을 로컬에 다운로드하는 방법을 보여주는 완전한 C# 예제입니다. 이는 이메일에서 사진을 저장하는 방법 및 이메일 사진 다운로드와 같은 사용 사례를 해결합니다.
단계 1 — API 초기화:
var config = new Configuration("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
var parserApi = new ParserApi(config);
Step 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/객체 저장소 키를 구성할 때는 슬래시(/) 구분자를 사용하십시오. - 로컬 파일 시스템 경로(다운로드한 파일을 macOS에 저장)에는
Path.Combine만 사용하십시오. - 위 코드는 API에서 반환된
img.Path를 정규화하고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"}"
응답은 클라우드 경로와 함께 추출된 이미지 레코드의 배열을 반환합니다. 파일 API 또는 서명된 URL을 사용하여 다운로드하십시오.
온라인 이메일 이미지 추출기 시도해 보세요
코드 한 줄도 쓰지 않고 REST API의 기능을 테스트하기 위해, 저희 무료 온라인 Email Image Extractor 도구를 사용해 보시기 바랍니다. 이 도구는 GroupDocs.Parser Cloud API를 기반으로 개발되었으며, 이메일 사진을 저장할 수 있게 해줍니다.

문제 해결 및 디버깅
지정된 키가 존재하지 않습니다” — API에서 반환된 정확한img.Path값을 검사하십시오. 반환된 경로에 이미OutputPath`가 포함되어 있다면, 이를 앞에 추가하지 마십시오.- 이미지가 발견되지 않았습니다 — 이메일에 실제로 지원되는 이미지 형식이 포함되어 있는지 확인하고 중첩된 MIME 부분을 확인하십시오.
- 대용량 이메일 — 매우 큰 이미지나 많은 이미지의 경우, 클라우드 저장소 출력 및 배치 다운로드를 선호합니다.
- 권한 — API 자격 증명과
StorageName(예:internal)이 올바른지 확인하십시오.
결론
이 기사에서는 이메일 파일(.eml 및 .msg)에서 이미지를 추출하는 방법, 이메일에서 프로그래밍 방식으로 사진을 저장하는 방법, GroupDocs.Parser Cloud SDK for .NET을 사용하여 인라인 및 첨부된 그림을 다운로드하는 방법을 보여주었습니다.
관련 기사
다음 기사를 방문하여 더 자세히 알아보는 것을 강력히 추천합니다:
자주 묻는 질문 (FAQs)
이메일에서 인라인 사진을 추출할 수 있나요? 네, API는 인라인 및 임베드된 이미지를 자동으로 추출합니다.
이 작업은 .msg (Outlook) 파일과 함께 작동합니까? 네 — MSG 및 EML 형식이 지원됩니다.
첨부된 사진만 추출할 수 있나요? 네, 필터링 옵션은 첨부파일 전용 추출을 허용합니다.
어떤 이미지 형식이 지원됩니까? JPG, PNG, BMP, GIF, TIFF, 및 기타 일반적인 이미지 유형.
무료 체험이 있나요? 네. 무료 계정을 만들 수 있고 매달 150개의 API 호출을 받을 수 있습니다.
