최소 코드로 메시지 변환 및 변형

이메일 변환은 이전에 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 | (런타임 오버로드만) 대상 형식을 문자열로 지정합니다. |

지원되는 소스 형식은 EMLMSG이며, 지원되는 대상은 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 |