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
awaitje. 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ávratuTaskdokonč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:
FolderOutputHandlerzapíše do existující složky, ale nevytvoří ji. ZavolejteDirectory.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 > (dvamessage.*souborů, které by jinak chtěly oba zapisovatmessage.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 |