1

ドキュメントを送信し、返送時にOutlookからインポートするスタンドアロンのc#デスクトップアプリケーションを使用しています。アプリケーションは、指定されたフォルダーから電子メールを取得して処理し、送信者の名前とその他のものをデータベースに保存します。

これは、SenderEmailAddressプロパティを持つOutlook2003および2007でうまく機能します。ただし、Outlook 2000およびXPにはこのプロパティがなく、一貫してname@domain.comを返すことはありません。これらのバージョンのサポートを提供しています。

Outlook Redemptionというライブラリがこれを解決することがわかりましたが、私は.netで開発しており、顧客レジストリへの書き込みを避けたいと考えています。また、MAPI33はMAPIの.Netラッパーであることがわかりましたが、それがまだサポートされているかどうかはフォーラムからは不明です。

Redemption dllに代わる.Netの代替手段、またはOutlookのバージョン間で一貫して電子メールアドレスを取得できるようにするためのアプローチについてのアドバイスをいただければ幸いです。

どうもありがとう

AbsFabs

エピローグ: この記事http://support.microsoft.com/kb/324530のソリューションを使用することになりました。これは、返信を作成してから、作成したメールアイテムのアドレスへの返信を抽出することで構成されていました。インターネット経由で送信される電子メールに対してはうまく機能し、現在ExchangeServerのテストを行っています。

私の旅行でもこれを見つけました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を構成する可能性があります。

ご意見ありがとうございます

AbsFabs

私は最終的に償還を使用することになりました。仕事のための優れたツール。私の問題は、アプリのインストール時にdllを登録する必要があることでした。私のアプリはdotnetで書かれているので、何も登録する必要はありません。レジストリのないCOMを使用してdll登録の問題を回避することができました。

インスピレーションをありがとう。

4

5 に答える 5

1

職場でも同様の問題がありましたが、いくつかの問題を引き起こした netMAPI ルートを使用することにしました。

その主な問題は、.NET がそうであるように、MAPI が独自のメモリを管理していたことです。つまり、ときどき (社内ソフトウェアを使用している約 300 人がいます)、アプリケーションがクラッシュし、Windows の「レポート エラー」ダイアログが生成されます。私たち自身のバグ追跡ダイアログ。これは、2 つのメモリ ヒープが互いに上書きされていることが原因でした。

Exchange サーバーを使用する必要があるため、いくつかの調査を行った結果、VB6 アプリで MAPI コードを記述した場合、独自のメモリ空間があり、.NET ヒープが上書きされないことがわかりました。

これはかなり長ったらしい方法ですが、これまでのところ問題はなく、毎日数百 (数千ではないにしても) のメールがスタッフから送信されています。

于 2008-10-06T11:41:34.510 に答える
1

C# プロダクション コードで Outlook Redemption ソリューションを使用しています。美しく機能します。これにより、メール メッセージ (IRDOMail) の SenderID を取得でき、そこから IRDOSession オブジェクトの GetAddressEntryFromID() メソッドを使用できます。

于 2008-10-06T09:28:02.673 に答える
0

Redemption は、レジストリにインストールしなくても使用できます。C#、VB.Net、Delphi、および C++ でRedemptionLoaderを使用できます。

//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);
于 2013-12-29T16:09:30.350 に答える
0

良いニュースは、適切なインターフェイスを追跡することで、正しい方向に進んでいることです。悪いニュースは、2000 と XP が .NET でサポートされていないことです。これは、2000 と XP が .NET よりも前に登場し、2003 になって初めて COM を .NET で動作させるための本格的な取り組みが行われたためです。

これらのバージョン 2000 および XP のソリューションは、適切な COM インターフェイスを追跡し、それらを自分でラップすることで構成されます。これらのバージョンの Outlook でこれを何度も行う必要がありましたが、決してきれいではありません。とても幸運。

于 2008-09-22T00:48:14.183 に答える
-1

これらを実際に使用したことはありませんが、Outlookコラボレーション データ オブジェクト(CDO)を試すことができます。以前は Outlook と一緒にインストールできるアドオンでしたが、現在は個別に提供されています。

于 2008-09-21T23:38:50.933 に答える