【问题标题】:looping through inbox and save attachments循环浏览收件箱并保存附件
【发布时间】:2016-04-05 23:50:02
【问题描述】:

我试图在某一天查找一封电子邮件并保存附件。我的代码如下。

我遇到的问题是,尽管我在收件箱中看到它们,但在调试收件箱中的所有项目都不是 MailItem 类型时。我错过了什么?

更新

在调试中,当我查看 oFld.Items.Count 时,它显示 4890,这是我收件箱中的电子邮件数量。认为我没有正确使用 item.GetType 部分

public void SaveAttachment(DateTime dateEmail, string emailSubject, string saveLocation)
        {
            Outlook.Application oApp = new Outlook.Application();
            Outlook.NameSpace oNs = oApp.GetNamespace("MAPI");
            Outlook.MAPIFolder oFld = oNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

            foreach (object item in oFld.Items)
            {
                if (item.GetType() == typeof(Outlook.MailItem))
                {
                    Outlook.MailItem oMail = (Outlook.MailItem)item;

                    if (oMail.ReceivedTime < dateEmail)
                        return;

                    if (oMail.ReceivedTime.Date == dateEmail)
                    {
                        if (oMail.Subject.Contains(emailSubject))
                        {
                            for (int i = 0; i < oMail.Attachments.Count; i++)                                
                                oMail.Attachments[i].SaveAsFile(saveLocation + oMail.Attachments[i].FileName);                                
                        }
                    }
                }
            }
        }

【问题讨论】:

  • 他们是什么类型的
  • system.__ComObject 当我在即时窗口中输入 item.GetType().ToString() 时

标签: c# .net outlook-addin


【解决方案1】:

试试这个:

    foreach (object item in oFld.Items)
    {
        MailItem mailItem = item as MailItem;

        if (mailItem != null)
        {
            //blablabla
        }
    }

它似乎对某些人有用。

【讨论】:

  • 谢谢你的作品。如果该项目是一个约会项目而不是一个邮件项目会发生什么,它会抛出异常吗?
  • 不,当变量不是被转换的类型时,使用“as”进行转换会返回 null。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多