Konvertovat a transformovat zprávy s minimálním kódem

Konverze e‑mailu dříve znamenala načíst jej do MailMessage, výběr správného SaveOptions, propojení proudů a zapamatování, který formát potřebuje které přepínače. Aspose.Email.LowCode jmenný prostor shrnuje vše do jediné statické volby. Předáte mu proud, název souboru a požadovaný formát – on zjistí zbytek a zapíše výsledek kamkoliv mu řeknete.5899c1__](../src/LowCodeEmailConversion) projekt, který je s ním dodáván.

Proč „low-code“ jmenný prostor?

Aspose.Email.LowCode je tenká, úkolově orientovaná vrstva nad kompletním e‑mailovým API. Existuje pro 80 % případů – „potřebuji jen převést tuto zprávu do toho formátu“ – kde nechcete přemýšlet o modelech zpráv, MIME nebo možnostech ukládání.

Je postaveno kolem tří typů:

| Typ | Role | | — | — | | Converter | Statické metody provádějící konverzi. | |94b97d5590014b04_IOutputHandler) je klíčová myšlenka designu: stejná jednorázová konverze může cílit na disk, paměť, databázi, cloudové úložiště nebo HTTP odpověď jednoduše výměnou obslužného objektu.

API konvertoru na první pohled

Každá metoda je static, vrací Task, a následuje stejný tvar:

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);

| Parametr | Význam | | — | — | | input | Vstupní zpráva jako Stream (soubor, upload, paměťový buffer…). | | nameWithExtension | Původní název souboru, např. "message.msg". Přípona říká konvertoru vstupní formát, takže musí být přesná. | | handler | The IOutputHandler který přijímá převodní výstupní proud. | | outputType | (pouze přetížení za běhu) cílový formát jako řetězec. |

Podporované vstupní formáty jsou EML a MSG; podporované cíle jsou EML, MSG, HTML, MHT a MHTML.

Poznámka: tyto metody jsou asynchronní – vždy await je. Konvertor > zapisuje do obslužného objektu jako součást této úlohy, takže výstup není zaručeně > vyprázdněn až do návratu Task dokončena.

Automatická detekce konverze

Convert čte příponu nameWithExtension, detekuje vstupní formát a produkuje cokoliv outputType to, co požadujete. Toto je nejflexibilnější vstupní bod, když je cílový formát rozhodován za běhu (např. z uživatelského vstupu nebo konfigurace).

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

Když je cíl pevně daný a známý při kompilaci, upřednostněte explicitní, srozumitelný způsob. ConvertToEml převádí Outlook .msg do standardního 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

Opak směru. Použijte ConvertToMsg když aplikace nebo příjemce očekává nativní položky Outlooku:

using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\msg");

await Converter.ConvertToMsg(input, "message.eml", handler);

E‑mail → HTML

ConvertToHtml vyrenderuje zprávu jako samostatný HTML dokument – ideální pro náhled e‑mailu v prohlížeči nebo jeho vložení do webové stránky. Přijímá buď .eml nebo .msg vstup:

using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");

await Converter.ConvertToHtml(input, "message.eml", handler);

E‑mail → MHT a MHTML

Oba formáty balí tělo zprávy a její zdroje do jediného webového archivu, což je praktické pro archivaci nebo sdílení samostatného snímku. MHTML je bohatší varianta a typicky zachovává hlavičky e‑mailu (From / To / Subject / Date) v renderovaném výstupu.

// 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"));

Převádět jen když je potřeba

ConvertEmlOrMsg převádí vstup do požadovaného formátu pouze pokud již není v tomto formátu. Nasměrujte ho na smíšený hromádku .eml a .msg soubory a požadujte "eml": .eml soubory procházejí, .msg soubory jsou konvertovány – aniž byste sami museli rozlišovat podle přípony. To je ideální pro normalizaci poštovní schránky do jednoho formátu.

// .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");

Hromadná konverze složky

Protože každá konverze je jen volání metody, škálování na hromadnou práci téměř nevyžaduje žádný další kód – projděte soubory a znovu použijte obslužnou rutinu. Zde je každá zpráva ve složce renderována do 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");
}

Tip: FolderOutputHandler zapíše do existující složky, ale nevytvoří ji. Zavolejte Directory.CreateDirectory(...) nejprve. Přidělení každému zdroji > vlastní podsložky také zabraňuje kolizím, když několik zpráv sdílí základní název > (dva message.* souborů, které by jinak chtěly oba zapisovat message.html).

Odesílání výstupu někam jinam než na disk

Zde je IOutputHandler abstrakci, která se vyplatí. Rozhraní je drobné:

public interface IOutputHandler
{
    void AddOutputStream(string name, Action<Stream> writeAction);
    Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync);
}

Konvertor volá jeden z těchto přetížených metod s názvem výstupního souboru a zápisníkem. Vaše implementace poskytuje Stream a rozhoduje, co dělat s bajty. Handler, který zachytí vše v paměti, vypadá takto:

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();
    }
}

Volání konverze samotné zůstává beze změny – pouze handler se liší:

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...

Odtud je to krátký krok k Stream-do-cloudu nebo Stream-do-HTTP-response handler.

Výběr správné metody

| Cíl | Použití | | — | — | | Cílový formát znám při kompilaci | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | Cílový formát rozhodnutý za běhu | Convert(..., outputType) | | Normalizovat soubory, vynechat již ve cílovém formátu | ConvertEmlOrMsg(..., outputType) | | Zapsat výsledky do složky | FolderOutputHandler | | Zapsat výsledky do paměti / cloudu / HTTP / databáze | Vlastní IOutputHandler |