Konwertuj i przekształcaj wiadomości przy minimalnym kodzie
Konwersja e‑maila kiedyś oznaczała wczytanie go do MailMessage, wybierając właściwy SaveOptions, podłączając strumienie i pamiętając, który format wymaga których przełączników. The Aspose.Email.LowCode namespace collapses all of that into a single static call. You hand it a stream, the file name, and the format you want — it figures out the rest and writes the result wherever you tell it to.5899c1__](../src/LowCodeEmailConversion) projekt, który jest dostarczany wraz z nią.
Dlaczego przestrzeń nazw „low-code”?
Aspose.Email.LowCode jest cienką, zadaniową powłoką nad pełnym API e‑mail. Istnieje dla 80% przypadków — „Chcę po prostu zamienić tę wiadomość na ten format” — gdzie nie chcesz myśleć o modelach wiadomości, MIME czy opcjach przechowywania.
Opiera się na trzech typach:
| Typ | Rola | | — | — | | Converter | Metody statyczne wykonujące konwersję. | |94b97d5590014b04_IOutputHandler) to kluczowa idea projektowa: ta sama jednowierszowa konwersja może docierać do dysku, pamięci, bazy danych, chmury lub odpowiedzi HTTP po prostu zamieniając obsługę.
API Convertera w skrócie
Każda metoda jest static, zwraca Task, i ma tę samą strukturę:
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 | Znaczenie | | — | — | | input | Źródłowa wiadomość jako Stream (plik, upload, bufor pamięci…). | | nameWithExtension | Oryginalna nazwa pliku, np. "message.msg". Rozszerzenie informuje Converter o formacie źródłowym, więc musi być dokładne. | | handler | The IOutputHandler który odbiera przekonwertowany strumień wyjściowy. | | outputType | (Tylko przeciążenia w czasie działania) format docelowy jako string. |
Obsługiwane formaty źródłowe to EML i MSG; obsługiwane cele to EML, MSG, HTML, MHT i MHTML.
Uwaga: te metody są asynchroniczne — zawsze
awaitJeśli Converter > zapisuje do obsługi jako część tego zadania, wyjście nie jest gwarantowane, że zostanie > opróżnione do momentu zwróceniaTaskzostaje zakończone.
Automatyczne wykrywanie konwersji
Convert odczytuje rozszerzenie nameWithExtension, wykrywa format źródłowy i produkuje cokolwiek outputType o które prosisz. To najbardziej elastyczny punkt wejścia, gdy format docelowy jest określany w czasie działania (np. z wejścia użytkownika lub konfiguracji).
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
Gdy docelowy format jest stały i znany w czasie kompilacji, preferuj jawną, wyraźnie określającą intencję metodę. ConvertToEml przekształca Outlook .msg do standardowego 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
Odwrócony kierunek. Użyj ConvertToMsg gdy aplikacja lub odbiorca oczekuje natywnych elementów Outlook:
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 renderuje wiadomość jako odrębny dokument HTML — idealny do podglądu e‑maila w przeglądarce lub osadzenia go na stronie internetowej. Akceptuje zarówno
.eml lub .msg wejście:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");
await Converter.ConvertToHtml(input, "message.eml", handler);
E‑mail → MHT i MHTML
Oba formaty pakują treść wiadomości i jej zasoby w pojedynczy plik archiwum webowego, co jest wygodne do archiwizacji lub udostępniania samodzielnego migawki. MHTML jest bogatszą odmianą i zazwyczaj zachowuje nagłówki e‑mail (From / To / Subject / Date) w renderowanym wyjściu.
// 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"));
Konwertuj tylko w razie potrzeby
ConvertEmlOrMsg konwertuje wejście do żądanego formatu tylko jeśli nie jest już w tym formacie. skieruj ją na mieszany stos .eml i .msg pliki i zapytaj o "eml": .eml pliki przechodzą, .msg pliki są konwertowane — bez konieczności samodzielnego rozgałęziania po rozszerzeniu. To czyni ją idealną do normalizacji skrzynki odbiorczej do jednego formatu.
// .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");
Konwersja wsadowa folderu
Ponieważ każda konwersja to tylko wywołanie metody, skalowanie do pracy zbiorczej wymaga prawie żadnego dodatkowego kodu — wyenumeruj pliki i ponownie użyj obsługi. Tutaj każda wiadomość w folderze jest renderowana 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");
}
Wskazówka:
FolderOutputHandlerzapisuje do istniejącego folderu, ale go nie > tworzy. WywołajDirectory.CreateDirectory(...)pierwsze. Nadanie każdemu źródłu > własnego podfolderu zapobiega również kolizjom, gdy kilka wiadomości ma tę samą nazwę bazową > (dwamessage.*pliki w przeciwnym razie oba chciałyby zapisaćmessage.html).
Wysyłanie wyjścia poza dysk
To jest miejsce, gdzie IOutputHandler abstrakcja się opłaca. Interfejs jest mały:
public interface IOutputHandler
{
void AddOutputStream(string name, Action<Stream> writeAction);
Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync);
}
Konwerter wywołuje jedną z tych przeciążeń z nazwą pliku wyjściowego i pisarzem. Twoja implementacja dostarcza Stream i decyduje, co zrobić z bajtami. Obsługa, która przechwytuje wszystko w pamięci, wygląda tak:
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();
}
}
Wywołanie konwersji pozostaje niezmienione — różni się tylko obsługa:
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...
Stąd krótki krok do Stream-do chmury lub Stream-do-obsługi odpowiedzi HTTP.
Wybór właściwej metody
| Cel | Użycie | | — | — | | Format docelowy znany w czasie kompilacji | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | Format docelowy określany w czasie działania | Convert(..., outputType) | | Normalizuj pliki, pomijając te już w formacie docelowym | ConvertEmlOrMsg(..., outputType) | | Zapisz wyniki w folderze | FolderOutputHandler | | Zapisz wyniki w pamięci / chmurze / HTTP / bazie danych | Niestandardowy IOutputHandler |