メッセージ添付ファイルの管理

Outlook における添付ファイルの処理

Outlook メッセージ(MSG)ファイルの作成と保存 メッセージの作成と保存、添付ファイル付き MSG ファイルの作成方法を説明しています。本記事では、Aspose.Email を使用した Microsoft Outlook の添付ファイルの管理方法を解説します。メッセージファイルからの添付ファイルは、以下を使用してアクセスし、ディスクに保存します。 MapiMessage クラス 添付ファイル プロパティです。 添付ファイル プロパティは型のコレクションです MapiAttachmentCollection クラス。

添付タイプの確認 (インラインまたは通常)

インライン添付と通常添付は異なる目的で使用されます。インライン添付はメール本文に視覚的に組み込まれ、通常は画像やメディアファイルです。一方、通常添付はメールに添付された別個のファイルで、さまざまな種類のファイルが含まれます。 MapiAttachment.IsInline プロパティ( MapiAttachment クラスは、添付ファイルがインラインか通常かを示す値を取得します。

以下のコードサンプルは、ロードされた MapiMessage 内の各添付ファイルの情報を抽出・表示します。表示名やインライン添付かどうかなどが含まれます。

var message = MapiMessage.Load(fileName);

foreach (var attach in message.Attachments)
{
    Console.WriteLine($"{attach.DisplayName0} : {attach.IsInline)}");
}

添付タイプの確認 (IsReference)

この MapiAttachment クラスには IsReference プロパティは、開発者がメッセージ内の参照添付ファイルを識別できるようにします。以下のコードサンプルを使用して、添付ファイルが参照添付かどうかを確認できます:

foreach (var attachment in msg.Attachments)
{
    if (attachment.IsReference)
    {
        // Process reference attachment
    }
}

MSG ファイルから添付ファイルを保存

MSG ファイルから添付ファイルを保存するには:

  1. 次を反復処理します MapiAttachmentCollection コレクションから個々の添付ファイルを取得します。
  2. 添付ファイルを保存するには、MapiAttachment クラスの Save() メソッドを呼び出します。

以下のコードスニペットは、添付ファイルをローカルディスクに保存する方法を示しています。

RTF 形式の MSG ファイルから添付を抽出

RTF 形式のメッセージの場合、以下のコードを使用してインライン添付またはアイコンとしてメッセージ本文に表示される添付を区別し抽出できます。次のコードスニペットは、RTF 形式の MSG から埋め込み添付を特定し抽出する方法を示しています。


var eml = MapiMessage.Load("MSG file with RTF Formatting.msg");

foreach (var attachment in eml.Attachments)
{
    if (IsAttachmentInline(attachment))
    {
        try
        {
            SaveAttachment(attachment, Data.Out/new Guid().ToString());
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

static bool IsAttachmentInline(MapiAttachment attachment)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "\x0003ObjInfo")
        {
            var odtPersist1 = BitConverter.ToUInt16(property.Data, 0);
            return (odtPersist1 & (1 << (7 - 1))) == 0;
        }
    }
    return false;
}

static void SaveAttachment(MapiAttachment attachment, string fileName)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "Package")
        {
            using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            fs.Write(property.Data, 0, property.Data.Length);
        }
    }
}

入れ子メールメッセージ添付の取得

埋め込み OLE 添付も以下に表示されます: MapiMessage クラス Attachment コレクション。以下のコード例は、メッセージファイル内の埋め込みメッセージ添付を解析し、ディスクに保存します。 MapiMessage クラス FromProperties() の静的メソッドは、埋め込み添付から新しいメッセージを作成できます。以下のコードスニペットは、入れ子になったメールメッセージの添付を取得する方法を示しています。

添付ファイルを削除

Aspose Outlook ライブラリは、Microsoft Outlook メッセージ (.msg) ファイルから添付ファイルを削除する機能を提供します。

  • RemoveAttachments() メソッドを呼び出します。メッセージファイルのパスをパラメータとして受け取ります。これは public static メソッドとして実装されているので、オブジェクトをインスタンス化する必要はありません。

以下のコードスニペットは、添付ファイルを削除する方法を示しています。

また、以下を呼び出すことができます: MapiMessage クラスの静的メソッド DestroyAttachment()。RemoveAttachment() よりも高速に動作します。なぜなら RemoveAttachment() メソッドはメッセージファイルを解析するためです。

MSG 添付ファイルを追加

Outlook メッセージは、添付として通常のメッセージまたは埋め込みメッセージとして、他の Microsoft Outlook メッセージを含めることができます。 MapiAttachmentCollection Add メソッドのオーバーロードされたメンバーを提供し、両方のタイプの添付ファイルを持つ Outlook メッセージを作成できます。

MapiMessage に参照添付を追加

この ReferenceAttachmentOptions クラスは、必要なすべてのプロパティを単一のオブジェクトにカプセル化することで、参照添付の追加を簡素化します。

ReferenceAttachmentOptions のパラメータ:

  • sharedLink: ファイルをホストするウェブサービスが提供する完全修飾された共有リンクです。
  • url: ファイルの場所またはリソース URL。
  • providerName: 参照添付プロバイダーの名前(例: Google Drive、Dropbox)
  • : ReferenceAttachmentOptions を使用した参照添付の追加
var options = new ReferenceAttachmentOptions(
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive");

// Add reference attachment
msg.Attachments.Add("Document.pdf", options);

メッセージを添付として埋め込む

以下のコードスニペットは、メッセージに MSG ファイル添付を埋め込む方法を示しています。

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

以下のコードスニペットは、添付ファイルから埋め込みメッセージを読み取る方法を示しています。

添付の挿入と置換

Aspose.Email API は、親メッセージ内の特定のインデックスに添付ファイルを挿入する機能を提供します。また、添付ファイルの内容を別のメッセージ添付で置き換える機能も提供します。

特定の位置に添付ファイルを挿入

Aspose.Email API は、MapiAttachmentCollection の Insert メソッド(MapiAttachmentCollection Insert(int index, string name, MapiMessage msg))を使用して、MSG 添付ファイルを親 MSG に挿入する機能を提供します。以下のコードスニペットは、特定の位置に添付ファイルを挿入する方法を示しています。

添付ファイルの内容を置換

Replace メソッドを使用して埋め込み添付ファイルの内容を新しいものに置き換えることができます。ただし、コレクションの Count が 2 である場合に PR_ATTACH_NUM = 4 の添付ファイルを挿入することはできません。以下のコードスニペットは、添付ファイルの内容を置き換える方法を示しています。

MapiMessage の添付ファイルの名前変更

MapiMessage の添付ファイルにおいて、DisplayName プロパティの値を編集することが可能です。

var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";

デジタル署名されたメッセージから添付を保存

Aspose.Email API は、クリア署名メッセージをデコードするかどうかを示す値を取得または設定する機能を提供します。