跨Outlook版本一致地检索"发件人"电子邮件地址

时间:2020-03-06 14:30:58  来源:igfitidea点击:

我正在使用一个独立的cdesktop应用程序,该应用程序发送文档,然后在发送回文档时从Outlook导入它们。该应用程序从指定的文件夹中提取电子邮件,然后对其进行处理,然后将发件人姓名和其他内容保存到数据库中。

这对于具有SenderEmailAddress属性的Outlook 2003和2007效果很好。但是,Outlook 2000和XP没有此属性,并且不会始终返回[email protected]。我正在为这些版本提供支持。

我发现一个名为Outlook Redemption的库可以解决此问题,但是我正在.net中进行开发,并且确实希望避免写入客​​户注册表。我还发现MAPI33是围绕MAPI的.Net包装器,但是从论坛上尚不清楚它是否仍受支持。

希望获得有关Redemption dll的.Net替代方案的任何指针,或者一种能够在Outlook版本之间始终如一地检索电子邮件地址的方法。

非常感谢

抗体

结语:
我最终使用了本文http://support.microsoft.com/kb/324530的解决方案。它包括创建答复,然后将答复提取到所创建邮件项的地址。它适用于通过Internet发送的电子邮件,目前正在通过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。

感谢反馈意见

抗体

我最终选择了救赎。出色的工作工具。我的问题是在安装我的应用程序时必须注册dll。由于我的应用是用dotnet编写的,因此不需要注册任何内容。我能够使用免注册的COM解决dll注册问题。

非常感谢启发。

解决方案

我从未真正使用过这些,但是我们可以尝试使用Outlook协作数据对象(CDO)。它们曾经是我们可以随Outlook安装的添加组件,但是现在它们是单独提供的。

好消息是,我们在跟踪正确的界面上处于正确的轨道。坏消息是,.NET中对2000和XP的支持非常差,因为它们早于.NET,直到2003年才真正使COM在.NET中工作。

这些2000和XP版本的解决方案将包括跟踪正确的COM接口并包装它们自己。对于这些版本的Outlook,我不得不做很多次,而且从来都不是很漂亮。祝你好运。

我正在Cproduction代码中使用Outlook Redemption解决方案。它工作得很漂亮。
有了它,我们可以获取邮件的SenderID(IRDOMail),然后从那里可以使用IRDOSession对象的GetAddressEntryFromID()方法。

在工作中遇到类似问题时,我们决定采用netMAPI路由,这引起了一些问题。

它的主要问题是MAPI管理着自己的内存,.NET也是如此。这意味着偶尔(我们有大约300个人在使用内部软件)会导致我们的应用程序崩溃,从而生成Windows的"报告错误"对话框,而不是我们自己的错误跟踪对话框。这是由两个彼此覆盖的内存堆引起的。

由于必须使用交换服务器,因此我们进行了一些研究,发现如果我们在VB6应用程序中编写MAPI代码,则它将拥有自己的内存空间,因此不会覆盖.NET堆。

这是一种很漫长的处理方式,但是到目前为止,我们还没有遇到任何问题,我们的员工每天都会发送数百(甚至数千)封电子邮件。