18

Outlook用COMAPIを使用せずに.NETのOutlook.MSGファイルから読み取る必要があります(アプリが実行されるマシンにはインストールされません)。それを行うための無料のサードパーティライブラリはありますか?From、To、CC、BCCの各フィールドを抽出したい。送信/受信日付フィールドは、MSGファイルにも保存されていると便利です。

4

7 に答える 7

10

COM なしで .msg ファイルを読み取るための CodeProject で利用可能なコードがあります。ここを参照してください。

于 2009-10-22T22:27:30.893 に答える
9

更新: Outlook Redemptionと呼ばれるサード パーティの COM ライブラリを見つけました。これは現時点では問題なく動作しています。.NET で COM-Interop を介して使用する場合は、すべての COM オブジェクトを使用後に解放することを忘れないでください。そうしないと、アプリケーションがランダムにクラッシュします。

于 2008-08-21T13:27:06.583 に答える
8

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
于 2010-03-02T18:35:56.820 に答える
6

Microsoftはこれを文書化しています:.MSGファイル形式の仕様

于 2008-08-19T20:45:55.757 に答える
3

これは「構造化ストレージ」ドキュメントです。私は以前、.NET (C++/CLI を使用) の下でさえも、 Andrew Peace のコードを使用してこれらを読み取ることに成功しました。これはクリーンで、かなり理解しやすいものです。基本的に、必要なレコードを把握し、それらを照会する必要があります。Outlook のバージョンやメッセージの種類が異なれば、レコードも異なるため、少し面倒です...

于 2008-08-21T18:25:08.303 に答える
1

当社の (商用) 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で見つけることができます。

于 2011-04-07T14:08:30.557 に答える
0

.MSGファイルをテキストエディタで開くと、必要な情報がファイル内にプレーンテキストとして保存されていることがわかると思います。(少なくとも私がチェックしたすべてのメッセージにあります)

「From:」や「To:」などで始まる行を探してファイルを解析し、必要な情報を抽出するコードを書くのは非常に簡単です。

メールの本文も必要な場合は、もう少し複雑になる可能性があります。

于 2008-08-19T08:24:37.440 に答える