최소 코드로 메시지 변환 및 변형
이메일 변환은 이전에 MailMessage, 올바른 SaveOptions, 스트림을 연결하고, 어떤 형식에 어떤 스위치가 필요한지 기억합니다. 그 Aspose.Email.LowCode 네임스페이스는 이를 단일 정적 호출로 압축합니다. 스트림, 파일 이름 및 원하는 형식을 전달하면 나머지를 알아서 처리하고 지정한 위치에 결과를 씁니다.5899c1__](../src/LowCodeEmailConversion) 함께 제공되는 프로젝트.
"저코드" 네임스페이스가 왜 있나요?
Aspose.Email.LowCode 전체 이메일 API 위에 얇고 작업 지향적인 인터페이스입니다. 80% 경우 — "이 메시지를 해당 형식으로 바꾸기만 하면 된다" — 에서 메시지 모델, MIME, 지속성 옵션을 신경 쓰지 않을 때 사용됩니다.
세 가지 유형을 중심으로 구축되었습니다:
| Type | Role | | — | — | | Converter | 변환을 수행하는 정적 메서드입니다. | |94b97d5590014b04_IOutputHandler)이 핵심 설계 아이디어입니다: 동일한 한 줄 변환을 디스크, 메모리, 데이터베이스, 클라우드 버킷 또는 HTTP 응답으로 대상 지정은 핸들러만 교체하면 됩니다.
컨버터 API 한눈에 보기
모든 메서드는 static, 반환값은 Task, 그리고 동일한 형태를 따릅니다:
Task Converter.ConvertToEml (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMsg (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToHtml (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMht (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMhtml(Stream input, string nameWithExtension, IOutputHandler handler);
// Format chosen at run time via the outputType string ("eml", "msg", "html", ...):
Task Converter.Convert (Stream input, string nameWithExtension, IOutputHandler handler, string outputType);
Task Converter.ConvertEmlOrMsg(Stream input, string nameWithExtension, IOutputHandler handler, string outputType);
| Parameter | Meaning | | — | — | | input | 소스 메시지를 Stream (파일, 업로드, 메모리 버퍼 등…). | | nameWithExtension | 원본 파일 이름, 예: "message.msg". 확장자는 컨버터에게 소스 형식을 알려주므로 정확해야 합니다. | | handler | The IOutputHandler 변환된 출력 스트림을 받는 핸들러입니다. | | outputType | (런타임 오버로드만) 대상 형식을 문자열로 지정합니다. |
지원되는 소스 형식은 EML 및 MSG이며, 지원되는 대상은 EML, MSG, HTML, MHT, MHTML입니다.
참고: 이 메서드들은 비동기식입니다 — 항상
await컨버터가 > 작업의 일부로 핸들러에 씁니다, 따라서 반환될 때까지 출력이 > 플러시된다고 보장할 수 없습니다Task완료됩니다.
자동 감지 변환
Convert 확장자를 읽습니다 nameWithExtension, 소스 형식을 감지하고 원하는 것을 생성합니다 outputType 요청한 형식입니다. 런타임에 대상 형식이 결정될 때(예: 사용자 입력이나 구성에서) 가장 유연한 진입점입니다.
using Aspose.Email.LowCode;
using FileStream input = File.OpenRead("message.msg");
var handler = new FolderOutputHandler(@"C:\output\auto");
await Converter.Convert(input, "message.msg", handler, "eml");
MSG → EML
대상 형식이 컴파일 시 고정되고 알려진 경우, 명시적이고 의도를 드러내는 메서드를 선호하십시오. ConvertToEml Outlook .msg 표준 RFC 822 .eml:
using FileStream input = File.OpenRead("message.msg");
var handler = new FolderOutputHandler(@"C:\output\eml");
await Converter.ConvertToEml(input, "message.msg", handler);
EML → MSG
역방향입니다. 사용 ConvertToMsg 응용 프로그램이나 수신자가 기본 Outlook 항목을 기대할 때:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\msg");
await Converter.ConvertToMsg(input, "message.eml", handler);
Email → HTML
ConvertToHtml 메시지를 독립형 HTML 문서로 렌더링합니다 — 브라우저에서 이메일을 미리보거나 웹 페이지에 삽입하기에 이상적입니다. 다음 중 하나를 받아들입니다
.eml 또는 .msg 입력:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");
await Converter.ConvertToHtml(input, "message.eml", handler);
Email → MHT 및 MHTML
두 형식 모두 메시지 본문과 그 리소스를 단일 웹 아카이브 파일에 번들링하므로 보관이나 자체 포함 스냅샷 공유에 편리합니다. MHTML은 더 풍부한 변형이며 일반적으로 렌더링된 출력에 이메일 헤더(From / To / Subject / Date)를 보존합니다.
// MHT
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertToMht(input, "message.msg", new FolderOutputHandler(@"C:\output\mht"));
// MHTML
using (FileStream input = File.OpenRead("message.eml"))
await Converter.ConvertToMhtml(input, "message.eml", new FolderOutputHandler(@"C:\output\mhtml"));
필요할 때만 변환
ConvertEmlOrMsg 입력을 요청한 형식으로 이미 그 형식이 아닌 경우에만 변환합니다. 혼합된 파일 더미에 지정하십시오 .eml 및 .msg 파일을 요청하고 "eml": .eml 파일이 통과하고, .msg 파일이 변환됩니다 — 확장자를 직접 분기할 필요가 없습니다. 이는 정규화된 인박스를 하나의 형식으로 만들기에 완벽합니다.
// .eml input requesting "eml" -> passes through
using (FileStream input = File.OpenRead("message.eml"))
await Converter.ConvertEmlOrMsg(input, "message.eml", handler, "eml");
// .msg input requesting "eml" -> converted
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertEmlOrMsg(input, "message.msg", handler, "eml");
폴더 일괄 변환
각 변환이 단지 메서드 호출이므로 대량 작업으로 확장할 때 거의 추가 코드가 필요하지 않습니다 — 파일을 열거하고 처리기를 재사용하십시오. 여기서는 폴더 안의 모든 메시지를 HTML로 렌더링합니다:
foreach (string path in Directory.EnumerateFiles(inputDir)
.Where(f => f.EndsWith(".eml") || f.EndsWith(".msg")))
{
var handler = new FolderOutputHandler(Path.Combine(outputDir, Path.GetFileNameWithoutExtension(path)));
using FileStream input = File.OpenRead(path);
await Converter.Convert(input, Path.GetFileName(path), handler, "html");
}
팁:
FolderOutputHandler기존 폴더에 쓰지만 > 생성하지는 않습니다. 호출Directory.CreateDirectory(...)먼저. 각 소스에 > 고유한 하위 폴더를 할당하면 여러 메시지가 기본 이름을 공유할 때 충돌을 방지합니다 > (두message.*파일이 두 경우 모두 쓰기를 원할 때message.html).
디스크가 아닌 다른 곳에 출력 보내기
여기가 IOutputHandler 추상화가 효과를 발휘합니다. 인터페이스는 매우 간단합니다:
public interface IOutputHandler
{
void AddOutputStream(string name, Action<Stream> writeAction);
Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync);
}
Converter는 출력 파일 이름과 작성자를 사용해 이러한 오버로드 중 하나를 호출합니다. 구현에서는 Stream 그리고 바이트를 어떻게 처리할지 결정합니다. 모든 내용을 메모리에 캡처하는 핸들러는 다음과 같습니다:
public sealed class InMemoryOutputHandler : IOutputHandler
{
private readonly Dictionary<string, byte[]> _files = new(StringComparer.OrdinalIgnoreCase);
public IReadOnlyDictionary<string, byte[]> Files => _files;
public void AddOutputStream(string name, Action<Stream> writeAction)
{
using var buffer = new MemoryStream();
writeAction(buffer);
_files[name] = buffer.ToArray();
}
public async Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync)
{
using var buffer = new MemoryStream();
await writeActionAsync(buffer);
_files[name] = buffer.ToArray();
}
}
변환 호출 자체는 변경되지 않으며 — 핸들러만 다릅니다:
var handler = new InMemoryOutputHandler();
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertToHtml(input, "message.msg", handler);
byte[] html = handler.Files["message.html"]; // stream it, store it, return it...
여기서부터는 짧은 단계로 Stream-to-cloud 또는 Stream-to-HTTP-response 핸들러.
올바른 방법 선택
| Goal | Use | | — | — | | 컴파일 시 알려진 대상 형식 | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | 런타임에 결정되는 대상 형식 | Convert(..., outputType) | | 파일을 정규화하고 이미 대상 형식인 경우 건너뛰기 | ConvertEmlOrMsg(..., outputType) | | 폴더에 결과 쓰기 | FolderOutputHandler | | 메모리/클라우드/HTTP/데이터베이스에 결과 쓰기 | 사용자 지정 IOutputHandler |