最小限のコードでメッセージを変換および変換
メール変換はかつて MailMessage、適切なものを選択します SaveOptions、ストリームの配線、どの形式がどのスイッチを必要とするかを記憶します。その Aspose.Email.LowCode 名前空間は、すべてを単一の静的呼び出しに凝縮します。ストリーム、ファイル名、希望の形式を渡すだけで、残りは自動で処理し、指定した場所に結果を書き込みます。5899c1__](../src/LowCodeEmailConversion) それに付随して出荷されるプロジェクト。
"ロウコード" 名前空間はなぜか?
Aspose.Email.LowCode フルメール API の薄いタスク指向インターフェースです。80% のケース — 「このメッセージをあの形式に変換したい」 — に対応し、メッセージモデル、MIME、永続化オプションを意識させません。
3 つの型を中心に構築されています:
| 型 | 役割 | | — | — | | 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);
| パラメータ | 意味 | | — | — | | input | ソースメッセージを Stream (ファイル、アップロード、メモリバッファ…)。 | | nameWithExtension | 元のファイル名、例: "message.msg". 拡張子がコンバータにソース形式を指示する ため、正確である必要があります。 | | handler | その IOutputHandler 変換された出力ストリームを受け取るものです。 | | outputType | (実行時オーバーロードのみ) ターゲット形式を文字列で指定します。 |
サポートされる入力形式は EML と MSG、サポートされる出力は 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);
メール → HTML
ConvertToHtml メッセージを単独の HTML ドキュメントとしてレンダリングします — ブラウザーでメールをプレビューしたり、Web ページに埋め込んだりするのに最適です。以下のいずれかを受け付けます
.eml または .msg 入力:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");
await Converter.ConvertToHtml(input, "message.eml", handler);
メール → MHT と MHTML
両形式ともメッセージ本文とリソースを単一の Web アーカイブファイルにバンドルします。これにより、アーカイブや自己完結型スナップショットの共有が便利になります。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);
}
コンバータは出力ファイル名とライターを渡してこれらのオーバーロードのいずれかを呼び出します。実装は 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-クラウドへ、または Stream-HTTP 応答ハンドラーへ。
適切なメソッドの選択
| 目標 | 使用 | | — | — | | コンパイル時に対象形式が既知 | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | 実行時に対象形式を決定 | Convert(..., outputType) | | ファイルを正規化し、既に対象形式のものはスキップする | ConvertEmlOrMsg(..., outputType) | | 結果をフォルダーに書き込む | FolderOutputHandler | | 結果をメモリ / クラウド / HTTP / データベースに書き込む | カスタム IOutputHandler |