0

我正试图确定Outlook 2007及更高版本中的电子邮件的发件人。在Outlook 2010中,MailItem对象上有一个Sender属性,而在Outlook 2007中,您必须按照this question中提及的方式进行不同的操作。如何检查Outlook Interop中是否存在属性?

因此,现在我需要知道当前版本的Outlook是否支持Sender属性,如果不支持,请使用其他方法。这样做的原因是我宁愿使用Sender属性与未来版本的Outlook兼容,而不是在Outlook版本上有条件。

所以问题是如何确定Outlook Interop中是否存在属性?显然,这是一个COM对象,我不能在这里使用反射。

+0

你试过try..catch-approach?这在COM互操作中经常需要。 – Scoregraphic 2012-08-03 06:49:56

+0

@Scoregraphic,我已经尝试过这种方法,但它不起作用。 Outlook只是从中间无声无息地退出,而无需进入catch块。 – devanalyst 2012-08-03 07:39:06

回答

1

我用MailItem.ItemProperties收集检查“发件人”属性。以下是密码

Microsoft.Office.Interop.Outlook.MailItem myMail; 

//Code to get the mail 
.... 

Microsoft.Office.Interop.Outlook.ItemProperties mailProps = myMail.ItemProperties; 

Microsoft.Office.Interop.Outlook.ItemProperty mailProp = mailProps.Item ("Sender"); //the parameter is case-sensitive 

if(mailProp != null) 
{ 
    //get email address using Sender object 
    Microsoft.Office.Interop.Outlook.AddressEntry theSender = myMail.Sender; 
} 
else 
{ 
    //use alternate method for Outlook 2007 
} 
0

您可以使用IDispatch::GetIDsOfNames,看看属性存在

+0

可否请您详细说明一下?我不知道我该如何使用它(并且它看起来不像迄今为止的任何注册用户) – Breeze 2016-05-06 06:01:10