2008-09-21 36 views
1

我正在創建一個獨立的c#桌面應用程序,用於發送文檔,然後在發回文檔時將它們從Outlook中導入。應用程序從指定文件夾中選取電子郵件來處理它們,然後將發件人名稱和其他內容保存到數據庫中。始終在Outlook版本中檢索「發件人」電子郵件地址

這適用於具有SenderEmailAddress屬性的Outlook 2003和2007。但是,Outlook 2000和XP不具有此屬性,並且不會始終返回[email protected]。我正在爲這些版本提供支持。

我發現一個名爲Outlook Redemption的庫將解決這個問題,但我正在開發.net,並且確實想避免寫入客​​戶註冊表。我還發現MAPI33是MAPI的一個.Net包裝器,但是論壇還不清楚它是否仍被支持。

希望任何關於.Net替代Redemption dll的指針或能夠始終如一地檢索Outlook版本中的電子郵件地址的方法。

非常感謝

AbsFabs

結語: 我結束了使用從這篇文章http://support.microsoft.com/kb/324530的解決方案。它包括創建一個回覆,然後提取對創建的mailitem地址的回覆。它適用於通過互聯網發送的電子郵件,目前正在通過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.

感謝您的反饋

AbsFabs

我最終清盤使用贖回。這項工作的絕佳工具。我的問題是在安裝應用程序時必須註冊dll。由於我的應用程序是用dotnet編寫的,它不需要註冊任何東西。我能夠使用無註冊表的COM來解決註冊問題。

非常感謝您的靈感。

+0

只是爲了澄清,你是否試圖創建一個Outlook的加載項,將執行此任務?或者你是否正在創建一個獨立的控制檯/ Windows應用程序來完成這項工作? – 2008-09-21 21:55:42

回答

1

我在C#生產代碼中使用Outlook Redemption解決方案。它的作品非常漂亮。 有了它,您可以獲得郵件消息(IRDOMail)的SenderID,然後可以使用IRDOSession對象的GetAddressEntryFromID()方法。

-1

我從來沒有真正使用這些,但你可以嘗試Outlook Collaboration Data Objects(CDO)。他們曾經是可以使用outlook安裝的附加組件,但現在它們將分開提供。

0

好消息是,你在正確的軌道上跟蹤正確的界面。壞消息是,2000和XP在.NET中的支持很差,因爲它們是在.NET之前發佈的,而到了2003年才真正讓.NET在.NET中運行。

對於這些版本2000和XP,您的解決方案將包括您追蹤正確的COM接口並將它們包裝到自己。對於這些版本的Outlook,我不得不多次執行此操作,並且它永遠不會很漂亮。祝你好運。

1

雖然在工作中有類似的問題,但我們決定去netMAPI路由,這已經導致了一些問題。

它的主要問題是,MAPI管理自己的內存,就像.NET一樣,偶爾(我們有大約300人在使用我們的內部軟件)會導致我們的應用程序崩潰,從而生成窗口的報告錯誤'對話框而不是我們自己的錯誤跟蹤對話框。這是由兩個覆蓋彼此的內存堆造成的。

因爲我們必須使用交換服務器,所以我們做了一些研究,發現如果您在VB6應用程序中編寫MAPI代碼,它將擁有自己的內存空間,因此不會覆蓋.NET堆。

這是一種相當冗長的做事方式,但迄今爲止我們沒有任何問題,並且每天都有數百(如果不是數千)電子郵件由我們的員工發送。

0

可以使用贖回而無需將其安裝在註冊表中 - 您可以在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); 
相關問題