始终检索“从”跨版本的Outlook电子邮件地址(Consistently retrieve “Fr

2019-09-25 17:23发布

我的工作是发出的文件,然后从Outlook导入他们时,他们被送回一个独立的C#桌面应用程序。 该应用程序拿起电子邮件从一个指定的文件夹处理它们,然后保存发件人的名字加上其他的东西到数据库。

这非常适用于Outlook 2003和2007,其具有SenderEmailAddress财产。 但是Outlook 2000和XP没有这个属性,并不会一致地返回name@domain.com。 我为这些版本的支持。

我发现,一个名为展望赎回库将解决这个问题,但我在.NET开发和真的想避免编写客户登记。 我还发现MAPI33 MAPI的.NET包装,但是否仍然支持它,它是从论坛不清楚。

希望任何指针作为一个净替代赎回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-在-vbnet-VSTO /它似乎是一个触摸参与。 这可能包括我的B计划,如果我现有的执行不下去了测试。

感谢您的反馈意见

AbsFabs

我最终清盘使用赎回。 这项工作很好的工具。 我的问题是具有安装我的应用程序时,注册DLL。 由于我的应用程序是用的dotnet它不需要注册任何东西。 我能解决使用免费的注册表-COM DLL的注册问题。

非常感谢您的灵感。

Answer 1:

我使用的C#代码的生产观赎回的解决方案。 它精美的作品。 有了它,你可以得到一个邮件的SenderID(IRDOMail),并从那里,你可以使用IRDOSession对象的GetAddressEntryFromID()方法。



Answer 2:

虽然有在工作中有类似的问题,我们决定去netMAPI路线,这已经引起了一些问题。

它的主要问题是,MAPI管理自己的内存一样,.NET含义偶尔(我们大约有300人在内部软件使用我们)会引起我们的应用程序崩溃,产生的窗口“报告错误”对话框,而不是我们自己的错误跟踪对话框。 这是由两个覆盖其他内存堆引起的。

因为我们必须使用Exchange服务器,我们做了一些研究,并发现,如果你在一个VB6应用程序写的MAPI代码,那就有它自己的内存空间,从而不会覆盖.NET堆。

这是做事情的一个相当长的长篇大论方式,但迄今为止,我们有没有问题,和电子邮件的数百名(如果不是数千名)是由我们的工作人员每天发送。



Answer 3:

好消息是,OU是在正确的轨道与追查正确的接口上。 坏消息是,2000和XP在.NET很差支持,因为他们的.NET之前来了,只有2003年是他们真正的努力来获得COM在.NET工作。

您对这些2000和XP版本的解决方案是要由你追查的权利COM接口和包装他们的自我。 我不得不做这些版本的Outlook过很多次,这是永远不会漂亮。 运气这么好。



Answer 4:

赎回,而不在注册表中安装它使用-您可以使用RedemptionLoader在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);


Answer 5:

我从来没有实际使用这些,但你可以尝试在Outlook中协作数据对象 (CDO)。 他们曾经是一个插件,你可以与Outlook安装,但现在他们被单独提供。



文章来源: Consistently retrieve “From” email addresses across Outlook versions