機能と特長

機能と機能性

このページでは、Aspose.Email FOSS for .NET のすべての主要機能を、動作する C# の例とともにカバーしています。


MSG ファイルの読み取り

パスまたはストリームから MSG ファイルをロードし、すべてのプロパティにアクセスする:

using System.IO;
using Aspose.Email.Foss.Msg;

using var stream = File.OpenRead("message.msg");
var message = MapiMessage.FromStream(stream);

Console.WriteLine(message.Subject);
Console.WriteLine(message.Body);
Console.WriteLine(message.HtmlBody);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.MessageDeliveryTime);
Console.WriteLine(message.InternetMessageId);

非標準の MSG ファイルの寛容な解析には strict: false を使用してください:

var message = MapiMessage.FromFile("message.msg", strict: false);

スローせずにフォーマット警告を確認するには、ValidationIssues をチェックしてください:

foreach (var issue in message.ValidationIssues)
    Console.WriteLine($"Warning: {issue}");

MSG ファイルの作成

MapiMessage.Create() を使用して完全なメールを作成し、Save() でシリアライズします:

using System.IO;
using Aspose.Email.Foss.Msg;

var message = MapiMessage.Create("Hello", "Body");
message.SenderName = "Alice";
message.SenderEmailAddress = "alice@example.com";
message.HtmlBody = "<p>Body</p>";
message.InternetMessageId = "<hello@example.com>";
message.MessageDeliveryTime = new DateTime(2024, 1, 2, 3, 4, 5, DateTimeKind.Utc);

message.AddRecipient("bob@example.com", "Bob");

using var output = File.Create("hello.msg");
message.Save(output);

Save() は引数なしで byte[] を返します。Save(path) はファイルパスに直接書き込みます。


受信者

ToCc、およびBccの受信者をAddRecipient()で追加:

message.AddRecipient("alice@example.com", "Alice");
message.AddRecipient("bob@example.com", "Bob", MapiMessage.RecipientTypeCc);
message.AddRecipient("carol@example.com", "Carol", MapiMessage.RecipientTypeBcc);

ロードされたメッセージから受信者を反復処理する:

foreach (var recipient in message.Recipients)
    Console.WriteLine($"{recipient.DisplayName} <{recipient.EmailAddress}>");

添付ファイル

メタデータ付きのファイルまたはストリーム添付を追加:

// From byte array
message.AddAttachment("report.pdf", pdfBytes, "application/pdf");

// From stream
using var attachStream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", attachStream, "image/png");

// Inline image with Content-ID
message.AddAttachment("logo.png", logoBytes, "image/png", contentId: "logo@cid");

ロードされたメッセージから添付ファイルを読み取る:

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Filename: {attachment.Filename}");
    Console.WriteLine($"MIME type: {attachment.MimeType}");
    Console.WriteLine($"Size: {attachment.Data.Length} bytes");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

埋め込みメッセージ添付

別のものの中に MapiMessage を添付する — 転送メールチェーンで一般的です:

using Aspose.Email.Foss.Msg;

var parent = MapiMessage.Create("Outer", "Parent body");
var child = MapiMessage.Create("Inner", "Child body");
child.SenderEmailAddress = "inner@example.com";
parent.AddEmbeddedMessageAttachment(child, "inner.msg");

parent.Save("outer.msg");

埋め込みメッセージの添付ファイルを読む:

var loaded = MapiMessage.FromFile("outer.msg");
foreach (var attachment in loaded.Attachments)
{
    if (attachment.IsEmbeddedMessage)
    {
        Console.WriteLine($"Embedded: {attachment.EmbeddedMessage!.Subject}");
    }
}

EML と MIME の変換

RFC 5322 .eml ファイルを Outlook 互換ストレージ用の MapiMessage にロードする:

using System.IO;
using Aspose.Email.Foss.Msg;

using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);

using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

MSG ファイルから EML に変換する:

var message = MapiMessage.FromFile("message.msg");
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

LoadFromEml()string パスまたは byte[] を受け付けます。SaveToEml() を引数なしで呼び出すと byte[] が返されます。件名、本文、HTML 本文、送信者、受信者、およびすべての添付ファイル(Content-ID を使用したインライン画像を含む)は、完全な EML ↔ MSG ラウンドトリップで保持されます。


MAPI プロパティ アクセス

MapiPropertyCollectionSetProperty()GetPropertyValue() を介して MAPI プロパティへの型付きアクセスを提供します。標準プロパティには CommonMessagePropertyId 列挙値を使用してください:

using Aspose.Email.Foss.Msg;

var message = MapiMessage.FromFile("sample.msg");

// Named convenience properties
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.MessageDeliveryTime);

// Iterate all MAPI property keys
foreach (var key in message.IterPropertyKeys())
    Console.WriteLine($"0x{(ushort)key.PropertyId:X4} / {key.PropertyType}");

CFB コンテナ アクセス

Outlook MSG ファイルは Compound File Binary (CFB) フォーマット上に構築されています。CfbReader は、検査とデータ抽出のための完全なディレクトリツリーを公開します:

using System.Text;
using Aspose.Email.Foss.Cfb;

using var reader = CfbReader.FromFile("message.msg");

// Iterate all top-level children
foreach (var entry in reader.IterChildren(CfbConstants.RootStreamId))
    Console.WriteLine($"{(entry.IsStorage() ? "Storage" : "Stream")}: {entry.Name}");

// Navigate to a specific stream by path
var entry2 = reader.ResolvePath(["__substg1.0_0037001E"]);
if (entry2 is not null)
{
    var data = reader.GetStreamData(entry2.StreamId);
    Console.WriteLine(Encoding.Unicode.GetString(data));
}

CfbWriter を使用して、スクラッチから CFB ドキュメントを構築およびシリアライズする:

using System.Text;
using Aspose.Email.Foss.Cfb;

var document = new CfbDocument();
document.Root.AddStream(new CfbStream("Notes", Encoding.UTF8.GetBytes("hello")));
var storage = document.Root.AddStorage(new CfbStorage("DataStore"));
storage.AddStream(new CfbStream("Payload", Encoding.UTF8.GetBytes("content")));

byte[] bytes = CfbWriter.ToBytes(document);
File.WriteAllBytes("output.cfb", bytes);

ヒントとベストプラクティス

  • using または Dispose()MapiMessageCfbReader で使用してファイルハンドルを解放します
  • 読み込み後に message.ValidationIssues をチェックして、非標準の MSG 形式を検出します
  • FromFile() / FromStream()strict パラメータはエラー許容度を制御します — サードパーティシステムからのファイルを寛容に解析するには strict: false を使用します
  • MapiMessage.Create() はデフォルトで Unicode 文字列メッセージを生成します。レガシー ANSI 互換性のために unicodeStrings: false を設定してください
  • 引数なしの SaveToEml()byte[] を返します — インメモリワークフローに便利です

一般的な問題

IssueCauseFix
ロード時のCfbException有効なCFB/MSGファイルではありませんファイルがOutlook MSGであることを確認してください
ロード後にBodyが空です本文がHTMLのみで保存されています代わりにmessage.HtmlBodyを確認してください
受信者タイプ定数が見つかりません単独のタイプではありませんMapiMessage.RecipientTypeToMapiMessage.RecipientTypeCc、またはMapiMessage.RecipientTypeBccを使用してください
LoadFromEml後に添付ファイルが0件EMLにContent-Disposition: attachmentパーツがありませんインラインパーツ(Content-IDのみ)もAttachmentsに表示されます

API リファレンス概要

クラス説明
MapiMessage高レベルの MSG メッセージ表現
MapiAttachmentMapiMessage 上の添付ファイルまたは埋め込みメッセージ
MapiRecipientMapiMessage 上の受信者
MapiProperty単一の MAPI プロパティ エントリ
MapiPropertyCollection型付けされた MAPI プロパティ バッグ
CommonMessagePropertyId標準 MAPI プロパティ識別子の列挙型
MsgReader低レベルの MSG 構造リーダー
MsgWriter低レベルの MSG 構造ライター
CfbReaderCFB バイナリ コンテナリーダー
CfbWriterCFB バイナリ コンテナライター
CfbDocument構築用のインメモリ CFB ドキュメント
CfbStorageCFB ドキュメント内のストレージ ノード
CfbStreamCFB ドキュメント内のストリーム ノード
 日本語