Outlook ファイルの作成と保存

Aspose.Email は Outlook メッセージ (MSG) ファイルの作成をサポートします。本記事では以下の方法を説明します:

Outlook メッセージの作成と保存

この MailMessage クラスは…を持っています Save() Outlook MSG ファイルをディスクまたはストリームに保存できるメソッドです。以下のコードスニペットは、… のインスタンスを作成します。 MailMessage クラスで、From、To、Subject、Body などのプロパティを設定します。 Save() メソッドはファイル名を引数として受け取ります。さらに、Outlook メッセージは … で作成できます。 圧縮 RTF 本文 使用して MapiConversionOptions

  1. 新しいインスタンスを作成します MailMessage クラスで From、To、Subject、Body プロパティを設定します。
  2. 呼び出す MapiMessage クラス FromMailMessage オブジェクトを受け取るメソッド MailMessage タイプです。 FromMailMessage メソッドは…を変換します MailMessage へ MapiMessage (MSG)。
  3. 呼び出す MapiMessage.Save() MSG ファイルを保存するメソッド。

Windows アプリケーションのボタンコントロールのクリックイベントに、以下のコードを書きます。

// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();

// Set from, to, subject and body properties
mailMsg.From = "sender@domain.com";
mailMsg.To = "receiver@domain.com";
mailMsg.Subject = "This is test message";
mailMsg.Body = "This is test body";

// Create an instance of the MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
            
// Save the message (MSG) file
string strMsgFile = @"CreatingAndSavingOutlookMessages_out.msg";
outlookMsg.Save(dataDir + strMsgFile);

添付ファイル付き MSG ファイルの作成

上記の例では、シンプルな MSG ファイルを作成しました。Aspose.Email は添付ファイル付きのメッセージファイルの保存もサポートしています。必要なのは添付ファイルを対象に追加することだけです。 MailMessage インスタンスです。Add() メソッドを呼び出して添付ファイルを追加します。 MailMessage.Attachments コレクション。上記で作成したフォームにリストボックスを追加し、添付ファイルの追加と削除用にそれぞれボタンを 2 つ配置します。添付ファイルを追加するアプリの動作は次のとおりです:

  1. Add Attachment ボタンがクリックされると、Open File Dialog が表示され、ユーザーが添付ファイルを参照して選択できるようになります。
  2. ファイルが選択されると、フルパスがリストに追加されます。
  3. MSG ファイルが作成されると、添付ファイルのパスがリストから取得され、 MailMessage.Attachments コレクション。

Add Attachment ボタンのクリックイベントに以下のコードを書きます。

// Open a file open dialog to select the attachment
OpenFileDialog fd = new OpenFileDialog();
// If user selected the file and clicked OK, add the file name and path to the list
if (fd.ShowDialog() == DialogResult.OK)
{
    lstAttachments.Items.Add(fd.FileName);
}

Remove Attachment ボタンがクリックされたとき、リストボックスから選択項目を削除します。Remove Attachment ボタンのクリックイベントに以下のコードを書きます。

// Check if the user has selected any item in the attachments listbox
if (lstAttachments.SelectedItems.Count > 0)
{
    // Remove the selected attachment from the listbox
    lstAttachments.Items.RemoveAt(lstAttachments.SelectedIndex);
}

添付ファイルを追加するコードを MailMessage インスタンスです。Write Msg 関数の最終コードは以下の通りです。

// File name for output MSG file
string strMsgFile;

// Open a save file dialog for saving the file and Add filter for msg files
SaveFileDialog fd = new SaveFileDialog();
fd.Filter = "Outlook Message files (*.msg)|*.msg|All files (*.*)|*.*";

// If user pressed OK, save the file name + path
if (fd.ShowDialog() == DialogResult.OK)
{
    strMsgFile = fd.FileName;
}
else
{
    // If user did not selected the file, return
    return;
}

// Create an instance of MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = txtFrom.Text;
mailMsg.To = txtTo.Text;
mailMsg.Subject = txtSubject.Text;
mailMsg.Body = txtBody.Text;

// Add the attachments
foreach (string strFileName in lstAttachments.Items)
{
    mailMsg.Attachments.Add(new Attachment(strFileName));
}

// Create an instance of MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(strMsgFile);

RTF 本文付き MSG ファイルの作成

Aspose.Email では、リッチテキスト (RTF) 本文を持つ Outlook メッセージ (MSG) ファイルも作成できます。RTF 本文はテキストの書式設定をサポートしています。次のように設定して作成します。 MailMessage.HtmlBody プロパティ。変換する際は MailMessage インスタンスを MapiMessage インスタンスでは、HTML 本文が RTF に変換されます。この方法でメール本文の書式が保持されます。

以下の例は RTF 本文を持つ MSG ファイルを作成します。HTML 本文には見出しが1つ、太字と下線の書式が適用されています。この書式は HTML が RTF に変換されても保持されます。

// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();
            
// Set from, to, subject and body properties
mailMsg.From = "from@domain.com";
mailMsg.To = "to@domain.com";
mailMsg.Subject = "subject";
mailMsg.HtmlBody = "<h3>rtf example</h3><p>creating an <b><u>outlook message (msg)</u></b> file using Aspose.Email.</p>";
            
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(dataDir + "CreatingMSGFilesWithRTFBody_out.msg");

MAPI メッセージ本文の RTF 圧縮

NOTE: 圧縮プロセスはメッセージ作成時のパフォーマンスを低下させる可能性があります。この事実を理解し、ファイルサイズとパフォーマンスの間のトレードオフに基づいて圧縮フラグを設定することで、開発者はメールメッセージを扱う際に MSG および PST ファイルの作成を効果的に管理できます。

RTF 圧縮は、メッセージのサイズと、Microsoft Outlook がメールメッセージやその他のデータを保存するために使用する PST(Personal Storage Table)ファイルのサイズを削減することを目的としています。メッセージ本文の設定時に RTF 圧縮を使用することで、開発者はメールメッセージの保存に必要なメモリ量を減らしたり、メッセージ送信時のネットワーク帯域幅を最適化したりできます。

この目的のために、2つのオーバーロードされたメソッドが設計されています:

  • MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): このメソッドは、指定された文字列コンテンツと本文の contentType(例:プレーンテキスト、HTML など)を使用してメッセージ本文を設定できます。オプションの compression パラメータは、コンテンツを RTF 圧縮で圧縮するかどうかを指定する値です。compression が true の場合、コンテンツは圧縮され、メッセージサイズが小さくなります。

  • MapiMessageItemBase.SetBodyRtf(string content, bool compression): このメソッドは、メッセージ本文を RTF 形式で設定します。content パラメータは、メッセージ本文として設定される RTF コンテンツを表す文字列です。前述のメソッドと同様に、compression パラメータは RTF 圧縮を適用するかどうかを決定します。compression が true の場合、RTF コンテンツは圧縮されてサイズが縮小されます。

以下のコードサンプルは、HTML 本文を設定し圧縮したままにする方法を示しています。

var htmlBody = "<html><body><h1>This is the body content</h1></body></html>";

var msg = new MapiMessage("from@domain.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.SetBodyContent(htmlBody, BodyContentType.Html, true);

また、 MapiConversionOptions.UseBodyCompression プロパティです。このプロパティが有効になると、MailMessage から MapiMessage への変換時に RTF 本文圧縮が適用され、MSG ファイルのサイズが小さくなります。以下のコードサンプルに示されています:

var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);

ドラフト状態でメッセージを保存

メールは編集中で後で続きを編集したい場合に下書きとして保存されます。Aspose.Email はメッセージフラグを設定することでメールを下書き状態で保存することをサポートしています。以下は Outlook のメールメッセージ (MSG) を下書きとして保存するサンプルコードです。

// Change properties of an existing MSG file
string strExistingMsg = @"message.msg";
            
// Load the existing file in MailMessage and Change the properties
MailMessage msg = MailMessage.Load(dataDir + strExistingMsg, new MsgLoadOptions());
msg.Subject += "NEW SUBJECT (updated by Aspose.Email)";
msg.HtmlBody += "NEW BODY (updated by Aspose.Email)";
            
// Create an instance of type MapiMessage from MailMessage, Set message flag to un-sent (draft status) and Save it
MapiMessage mapiMsg = MapiMessage.FromMailMessage(msg);
mapiMsg.SetMessageFlags(MapiMessageFlags.MSGFLAG_UNSENT);
mapiMsg.Save(dataDir + "SavingMessageInDraftStatus_out.msg");