1

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

这适用于具有 SenderEmailAddress 属性的 Outlook 2003 和 2007。但是 Outlook 2000 和 XP 没有此属性,并且不会始终返回 name@domain.com。我正在为这些版本提供支持。

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

希望有任何关于 Redemption dll 的 .Net 替代方案或能够在 Outlook 版本中一致地检索电子邮件地址的方法的任何指针。

非常感谢

AbsFabs

结语: 我最终使用了这篇文章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-在-vbnet-vsto/它似乎涉及到触摸。如果我现有的实现无法通过测试,这可能包括我的 B 计划。

感谢您的反馈意见

AbsFabs

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

非常感谢您的启发。

4

5 回答 5

1

我在 C# 生产代码中使用 Outlook Redemption 解决方案。它工作得很好。有了它,您可以获得邮件消息 (IRDOMail) 的 SenderID,然后您可以使用 IRDOSession 对象的 GetAddressEntryFromID() 方法。

于 2008-10-06T09:28:02.673 回答
1

虽然在工作中遇到了类似的问题,但我们决定走 netMAPI 路线,这导致了一些问题。

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

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

这是一种相当冗长的做事方式,但到目前为止,我们没有遇到任何问题,我们的员工每天都会发送数百封(如果不是数千封)电子邮件。

于 2008-10-06T11:41:34.510 回答
0

好消息是你在正确的轨道上追踪正确的接口。坏消息是 2000 和 XP 在 .NET 中的支持很差,因为它们出现在 .NET 之前,并且只有 2003 才真正努力让 COM 在 .NET 中工作。

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

于 2008-09-22T00:48:14.183 回答
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 回答
-1

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

于 2008-09-21T23:38:50.933 回答