始终在Outlook版本中检索“发件人”电子邮件地址
我正在创建一个独立的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来解决注册问题。
非常感谢您的灵感。
我在C#生产代码中使用Outlook Redemption解决方案。它的作品非常漂亮。 有了它,您可以获得邮件消息(IRDOMail)的SenderID,然后可以使用IRDOSession对象的GetAddressEntryFromID()方法。
好消息是,你在正确的轨道上跟踪正确的界面。坏消息是,2000和XP在.NET中的支持很差,因为它们是在.NET之前发布的,而到了2003年才真正让.NET在.NET中运行。
对于这些版本2000和XP,您的解决方案将包括您追踪正确的COM接口并将它们包装到自己。对于这些版本的Outlook,我不得不多次执行此操作,并且它永远不会很漂亮。祝你好运。
虽然在工作中有类似的问题,但我们决定去netMAPI路由,这已经导致了一些问题。
它的主要问题是,MAPI管理自己的内存,就像.NET一样,偶尔(我们有大约300人在使用我们的内部软件)会导致我们的应用程序崩溃,从而生成窗口的报告错误'对话框而不是我们自己的错误跟踪对话框。这是由两个覆盖彼此的内存堆造成的。
因为我们必须使用交换服务器,所以我们做了一些研究,发现如果您在VB6应用程序中编写MAPI代码,它将拥有自己的内存空间,因此不会覆盖.NET堆。
这是一种相当冗长的做事方式,但迄今为止我们没有任何问题,并且每天都有数百(如果不是数千)电子邮件由我们的员工发送。
可以使用赎回而无需将其安装在注册表中 - 您可以在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);
只是为了澄清,你是否试图创建一个Outlook的加载项,将执行此任务?或者你是否正在创建一个独立的控制台/ Windows应用程序来完成这项工作? – 2008-09-21 21:55:42