Outlook のバージョン間で「差出人」メール アドレスを一貫して取得する
質問
私はドキュメントを送信し、返送されたときに Outlook からインポートするスタンドアロンの C# デスクトップ アプリケーションを作業しています。アプリケーションは、指定されたフォルダーから電子メールを取得して処理し、送信者の名前とその他の情報をデータベースに保存します。
これは、SenderEmailAddress プロパティを持つ Outlook 2003 および 2007 でうまく機能します。ただし、Outlook 2000 および XP にはこのプロパティがないため、一貫して name@domain.com が返されません。これらのバージョンのサポートを提供しています。
Outlook Redemption と呼ばれるライブラリがこの問題を解決することがわかりましたが、.net で開発しているため、顧客レジストリへの書き込みは避けたいと考えています。MAPI の .Net ラッパーである MAPI33 も見つけましたが、フォーラムからはまだサポートされているかどうかは不明です。
Redemption dll に代わる .Net の代替案、または Outlook のバージョン間で一貫して電子メール アドレスを取得できる方法についてのアドバイスをいただければ幸いです。
どうもありがとう
腹筋ファブ
エピローグ:結局この記事の解決策を使用しました http://support.microsoft.com/kb/324530. 。これには、返信の作成と、作成されたメールアイテムの返信先アドレスの抽出が含まれます。インターネット経由で送信される電子メールではうまく機能し、現在 Exchange Server のテストが行われています。
これも旅行中に見つけました http://anoriginalidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of-an-exchange-sender-of-a-mailitem-from-outlook-in-vbnet-vsto/ タッチが関係しているようです。既存の実装がテストに耐えられない場合、これはプラン B となる可能性があります。
ご意見ありがとうございます
腹筋ファブ
最終的にはRedemptionを使用することになりました。仕事に最適なツール。私の問題は、アプリのインストール時に dll を登録する必要があることでした。私のアプリは dotnet で書かれているので、何も登録する必要はありません。レジストリフリーの COM を使用して、DLL 登録の問題を回避することができました。
インスピレーションをありがとうございました。
解決
C# 製品コードで Outlook Redemption ソリューションを使用しています。美しく機能します。これを使用すると、メール メッセージ (IRDOMail) の SenderID を取得でき、そこから IRDOSession オブジェクトの GetAddressEntryFromID() メソッドを使用できます。
他のヒント
職場でも同様の問題を抱えていたため、netMAPI ルートを選択することにしましたが、これによりいくつかの問題が発生しました。
主な問題は、.NET と同様に MAPI が独自のメモリを管理していることです。つまり、時折 (社内ソフトウェアを約 300 人が使用しています) 原因でアプリケーションがクラッシュし、代わりに Windows の「エラー報告」ダイアログが生成されることがありました。独自のバグ追跡ダイアログ。これは、2 つのメモリが互いのメモリ ヒープを上書きすることが原因で発生しました。
Exchange サーバーを使用する必要があるため、調査を行ったところ、VB6 アプリで MAPI コードを作成すると、独自のメモリ領域が確保されるため、.NET ヒープが上書きされないことがわかりました。
かなり気の長いやり方ですが、これまでのところ何の問題もなく、スタッフから毎日数百通(数千通ではないにしても)のメールが送信されています。
良いニュースは、適切なインターフェイスを追跡するという正しい方向に進んでいることです。悪いニュースは、2000 と XP は .NET よりも前に登場し、.NET で COM を動作させる本格的な取り組みが行われたのは 2003 以降であるため、.NET でのサポートが非常に不十分であるということです。
これらのバージョン 2000 および XP のソリューションは、適切な COM インターフェイスを追跡し、それを自分でラップすることで構成されます。これらのバージョンの Outlook ではこれを何度も行う必要がありましたが、決してきれいなものではありませんでした。とても幸運。
Redemption はレジストリにインストールせずに使用できます。 償還ローダー C#、VB.Net、Delphi、C++ で。
//tell the app where the 32 and 64 bit dlls are located
//by default, they are assumed to be in the same folder as the current assembly and be named
//Redemption.dll and Redemption64.dll.
//In that case, you do not need to set the two properties below
RedemptionLoader.DllLocation64Bit = @"c:\SourceCode\Redemption\redemption64.dll";
RedemptionLoader.DllLocation32Bit = @"c:\SourceCode\Redemption\redemption.dll";
//Create a Redemption object and use it
RDOSession session = RedemptionLoader.new_RDOSession();
session.Logon(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
実際に使ったことはありませんが、Outlook を試してみてはいかがでしょうか コラボレーションデータオブジェクト (CDO)。以前は Outlook と一緒にインストールできるアドオンでしたが、現在は個別に提供されています。