Az Kodla Mesajları Dönüştür ve Dönüştür
Bir e-postayı dönüştürmek, onu bir MailMessage, doğru olanı seçerek SaveOptions, akışları bağlayıp, hangi formatın hangi anahtarları gerektirdiğini hatırlayarak. Aspose.Email.LowCode ad alanı hepsini tek bir statik çağrı içinde toplar. Bir akış, dosya adı ve istediğiniz formatı verirsiniz — gerisini çözer ve sonucu istediğiniz yere yazar.5899c1__](../src/LowCodeEmailConversion) yanında gönderilen proje.
"düşük kod" ad alanı neden?
Aspose.Email.LowCode tam e-posta API’si üzerine ince, görev odaklı bir yüzeydir. %80’lik durum için vardır — "Bu mesajı o formata dönüştürmem lazım" — mesaj modelleri, MIME ya da kalıcılık seçenekleriyle uğraşmak istemediğinizde.
Üç tip etrafında inşa edilmiştir:
| Tip | Rol | | — | — | | Converter | Dönüşümü gerçekleştiren statik yöntemler. | |94b97d5590014b04_IOutputHandler) ana tasarım fikri: aynı tek satırlık dönüşüm, işleyici değiştirerek diske, belleğe, bir veritabanına, bulut kovasına veya bir HTTP yanıtına hedeflenebilir.
Dönüştürücü API’sine bir bakış
Her yöntem static, bir Task, ve aynı şekli izler:
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);
| Parametre | Anlam | | — | — | | input | Kaynak mesaj bir Stream (bir dosya, bir yükleme, bir bellek tamponu…). | | nameWithExtension | Orijinal dosya adı, örn. "message.msg". Uzantı Dönüştürücüye kaynak formatı bildirir, bu yüzden doğru olmalıdır. | | handler | IOutputHandler dönüştürülmüş çıktı akışını alan. | | outputType | (Yalnızca çalışma zamanı aşırı yüklendiğinde) hedef format bir dize olarak. |
Desteklenen kaynak formatları EML ve MSG; desteklenen hedefler EML, MSG, HTML, MHT ve MHTML.
Not: bu yöntemler eşzamanlıdır — her zaman
awaitonlar. Dönüştürücü > görevin bir parçası olarak işleyiciye yazar, bu yüzden çıktı, döndürülenTasktamamlanır.
Otomatik algılamalı dönüşüm
Convert dosyanın uzantısını okur nameWithExtension, kaynak formatı algılar ve ne olursa olsun üretir outputType istediğiniz. Hedef format çalışma zamanında karar verildiğinde en esnek giriş noktasıdır (örneğin, kullanıcı girişi ya da yapılandırmadan).
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
Hedef derleme zamanında sabit ve biliniyorsa, açık ve niyet açıklayan yöntemi tercih edin. ConvertToEml bir Outlook .msg standart bir RFC 822’ye .eml:
using FileStream input = File.OpenRead("message.msg");
var handler = new FolderOutputHandler(@"C:\output\eml");
await Converter.ConvertToEml(input, "message.msg", handler);
EML → MSG
Ters yön. Kullan ConvertToMsg bir uygulama ya da alıcı yerel Outlook öğeleri beklediğinde:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\msg");
await Converter.ConvertToMsg(input, "message.eml", handler);
E-posta → HTML
ConvertToHtml bir mesajı bağımsız HTML belgesi olarak render eder — tarayıcıda e-posta önizlemesi yapmak veya bir web sayfasına gömmek için idealdir. Ya şu biçimi kabul eder
.eml veya .msg giriş:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");
await Converter.ConvertToHtml(input, "message.eml", handler);
E-posta → MHT ve MHTML
Her iki format da mesaj gövdesini ve kaynaklarını tek bir web-arşiv dosyasında paketler, bu da arşivleme veya bağımsız bir anlık görüntüyü paylaşma açısından uygundur. MHTML daha zengin bir varyanttır ve genellikle e-posta başlıklarını (Gönderen / Alıcı / Konu / Tarih) render edilmiş çıktıda korur.
// 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"));
Sadece gerektiğinde dönüştür
ConvertEmlOrMsg giriş dosyasını istenen formata zaten o formatta değilse dönüştürür. Karışık bir yığına yönlendirin .eml ve .msg dosyalar ve isteyin "eml": .eml dosyalar geçer, .msg dosyalar dönüştürülür — uzantıya kendiniz dalgalanmak zorunda kalmadan. Bu, bir gelen kutusunu tek bir formata normalleştirmek için mükemmeldir.
// .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");
Bir klasörü toplu dönüştürme
Her dönüşüm sadece bir yöntem çağrısı olduğundan, toplu çalışmaya ölçeklendirmek neredeyse hiç ek kod gerektirmez — dosyaları enumerate edip işleyiciyi yeniden kullanın. Burada bir klasördeki her mesaj HTML’ye dönüştürülür:
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");
}
İpucu:
FolderOutputHandlerbir mevcut klasöre yazar ama > oluşturmaz. ÇağırDirectory.CreateDirectory(...)ilk. Her kaynağa kendi alt klasörünü vermek, birkaç mesaj aynı temel adı paylaştığında çakışmaları da önler (ikimessage.*dosyalar aksi takdirde hem yazmak isterdimessage.html).
Çıktıyı diske yazmak yerine bir yere göndermek
Bu, IOutputHandler soyutlama işe yarar. Arayüz çok küçüktür:
public interface IOutputHandler
{
void AddOutputStream(string name, Action<Stream> writeAction);
Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync);
}
Dönüştürücü, çıktı dosya adı ve bir yazarla bu aşırı yüklemelerden birini çağırır. Gerçekleştirmeniz gereken bir Stream ve baytlarla ne yapılacağına karar verir. Bellekte her şeyi yakalayan bir işleyici şöyle görünür:
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();
}
}
Dönüşüm çağrısı aynı kalır — sadece işleyici değişir:
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...
Buradan kısa bir adımla bir Stream-to-cloud ya da Stream-to-HTTP-response işleyicisi.
Doğru yöntemi seçmek
| Hedef | Kullanım | | — | — | | Hedef format derleme zamanında biliniyor | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | Hedef format çalıştırma zamanında belirlenir | Convert(..., outputType) | | Dosyaları hedef formata zaten dönüştürülmüş olanları atlayarak normalleştir | ConvertEmlOrMsg(..., outputType) | | Sonuçları bir klasöre yaz | FolderOutputHandler | | Sonuçları bellek / bulut / HTTP / veritabanına yaz | Özel bir IOutputHandler |