Outlook用COMAPIを使用せずに.NETのOutlook.MSGファイルから読み取る必要があります(アプリが実行されるマシンにはインストールされません)。それを行うための無料のサードパーティライブラリはありますか?From、To、CC、BCCの各フィールドを抽出したい。送信/受信日付フィールドは、MSGファイルにも保存されていると便利です。
7 に答える
COM なしで .msg ファイルを読み取るための CodeProject で利用可能なコードがあります。ここを参照してください。
更新: Outlook Redemptionと呼ばれるサード パーティの COM ライブラリを見つけました。これは現時点では問題なく動作しています。.NET で COM-Interop を介して使用する場合は、すべての COM オブジェクトを使用後に解放することを忘れないでください。そうしないと、アプリケーションがランダムにクラッシュします。
Huseyint が見つけたOutlook Redemptionを使用したサンプル VBA コードを次に示します。
Public Sub ProcessMail()
Dim Sess As RDOSession
Dim myMsg As RDOMail
Dim myString As String
Set Sess = CreateObject("Redemption.RDOSession")
Set myMsg = Sess.GetMessageFromMsgFile("C:\TestHarness\kmail.msg")
myString = myMsg.Body
myMsg.Body = Replace(myString, "8750", "XXXX")
myMsg.Save
End Sub
Microsoftはこれを文書化しています:.MSGファイル形式の仕様
これは「構造化ストレージ」ドキュメントです。私は以前、.NET (C++/CLI を使用) の下でさえも、 Andrew Peace のコードを使用してこれらを読み取ることに成功しました。これはクリーンで、かなり理解しやすいものです。基本的に、必要なレコードを把握し、それらを照会する必要があります。Outlook のバージョンやメッセージの種類が異なれば、レコードも異なるため、少し面倒です...
当社の (商用) Rebex Secure Mailライブラリを試すことができます。Outlooks MSG 形式を読み取ることができます。次のコードは、その方法を示しています。
// Load message
MailMessage message = new MailMessage();
message.Load(@"c:\Temp\t\message.msg");
// show From, To and Sent date
Console.WriteLine("From: {0}", message.From);
Console.WriteLine("To: {0}", message.To);
Console.WriteLine("Sent: {0}", message.Date.LocalTime);
// find and try to parse the first 'Received' header
MailDateTime receivedDate = null;
string received = message.Headers.GetRaw("Received");
if (received != null)
{
int lastSemicolon = received.LastIndexOf(';');
if (lastSemicolon >= 0)
{
string rawDate = received.Substring(lastSemicolon + 1);
MimeHeader header = new MimeHeader("Date", rawDate);
receivedDate = header.Value as MailDateTime;
}
}
// display the received date if available
if (receivedDate != null)
Console.WriteLine("Received: {0}", receivedDate.LocalTime);
送信日と受信日、およびそれらがメッセージでどのように表されるかについての詳細は、http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zonesで見つけることができます。
.MSGファイルをテキストエディタで開くと、必要な情報がファイル内にプレーンテキストとして保存されていることがわかると思います。(少なくとも私がチェックしたすべてのメッセージにあります)
「From:」や「To:」などで始まる行を探してファイルを解析し、必要な情報を抽出するコードを書くのは非常に簡単です。
メールの本文も必要な場合は、もう少し複雑になる可能性があります。