2012-05-17 115 views
1

我的c sharp程序当前获取outlook电子邮件并将它们导入到数据集中。但是,我只收到每封电子邮件的主题。获取outlook电子邮件的属性

我正在使用Microsoft.Office.Interop.Outlook.Folder olCurrFolder;,我使用这个变量来获得主题(olCurrFolder从另一个循环获取设置)。为了得到对象我这样做:

intMailCount = olCurrFolder.Items.Count; 

for (int i = 1; i <= intMailCount; i++) 
{ 
    strSubject = olCurrFolder.Items[i].Subject; 
    strEmailReceived = olCurrFolder.Items[i].Received; 
} 

正如你所看到的,我也试图让收到的日期,但Items[i].Received不起作用。当我在Items[i]之后键入一个句点时,智能感知不会提取任何内容,并且会有一条消息表明它将在运行时解决。我不知道其他字段被称为什么(即收件日期,发件人,尺寸)。

是否有列表中包含我正在寻找的字段名称?

回答

1

为Outlook的MailItem对象的文档是在这里:http://msdn.microsoft.com/en-us/library/aa210946(v=office.11).aspx

可以使用ReceivedTime属性来获取收到的日期和时间。

intellisense有时不适用于VSTO的原因是许多属性返回dynamic。动态被视为一个支持每个可以想象的方法和属性的对象。这是防止智能感知工作的原因。如果使用不存在的方法,它将编译,但在运行时失败。

我发现MSDN文档在使用VSTO中的动态特性时非常有用。

+0

这正是我一直在寻找和无法在Google上找到它。仅供参考,在该页面的属性下,它有一个名为ReceivedTime的属性。这个属性给了我收到的日期和时间在一起,所以这工作完美。对于其他人试图做同样的事情,你必须像这样放置ToString():Items [i] .ReceivedTime.ToString() – mtlca401

+0

哦,是的。我看到了一个房产列表,没有看到它的时间,所以我认为它不在那里。我应该查看“属性”部分。 :) –

+0

没有biggie,那些属性是那种页面上混乱,所以很容易忽略一些东西。而且,人们会认为“时间”是指时间而非日期和时间。 – mtlca401

0

这是我做的

for (int i = 1; i <= items.Count; i++) 
{ 
    if (items[i] is Outlook.MailItem) 
    { 
     SenderName = ((Outlook.MailItem)inbox.Items[i]).SenderName; 
     SenderEmail =((Outlook.MailItem)inbox.Items[i]).SenderEmailAddress; 
     Subject = ((Outlook.MailItem)inbox.Items[i]).Subject; 
     Time = ((Outlook.MailItem)inbox.Items[i]).CreationTime.ToString(); 
+0

请勿使用多点表示法。除了效率极低之外,您还将在联机Exchange模式中用完RPC通道。只有一次检索该项目作为循环的开始,并在完成后使用Marshal.ReleaseComObject释放它。 –

0

如果你不想把对象的每一行,你可以这样做:

 for (int i = 0; i < items.Count; i++) 
     { 
      var mailItem = items[i] as Outlook.MailItem; 
      if (mailItem != null) 
      { 
       SenderName = mailItem.SenderName; 
       //etc... 
      } 
     }