我正在使用一个独立的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中的解决方案。它包括创建回复,然后提取对创建的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解决dll注册问题。
非常感谢你的灵感。
答案 0 :(得分:1)
我在C#生产代码中使用Outlook Redemption解决方案。它工作得很漂亮。 有了它,您可以获取邮件消息的SenderID(IRDOMail),并从那里,您可以使用IRDOSession对象的GetAddressEntryFromID()方法。
答案 1 :(得分:1)
虽然在工作中遇到类似的问题,但我们决定采用netMAPI路线,这导致了一些问题。
它的主要问题是MAPI管理自己的内存,.NET意味着偶尔(我们有大约300人使用我们的内部软件)它会导致我们的应用程序崩溃,生成Windows的报告错误'对话而不是我们自己的错误跟踪对话框。这是因为两人覆盖了彼此的记忆堆。
由于我们必须使用交换服务器,我们做了一些研究,并发现如果您在VB6应用程序中编写MAPI代码,它将拥有自己的内存空间,因此不会覆盖.NET堆。
这是一种相当漫长的做事方式,但到目前为止我们没有遇到任何问题,我们的员工每天都会发送数百封(如果不是数千封)电子邮件。
答案 2 :(得分:0)
好消息是,您正在追踪正确的界面。坏消息是,2000和XP在.NET中的支持非常差,因为它们来自.NET之前,只有在2003年才真正努力让COM在.NET中运行。
这些版本2000和XP的解决方案将包括跟踪正确的COM接口并将它们包装起来。对于这些版本的Outlook,我不得不多次这样做,它永远不会漂亮。祝你好运。
答案 3 :(得分: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);
答案 4 :(得分:-1)
我从未真正使用过这些,但您可以尝试使用Outlook Collaboration Data Objects(CDO)。它们曾经是一个可以与outlook一起安装的附加组件,但现在它们是单独提供的。