C# 无法获取有关MailItem的任何信息

C# 无法获取有关MailItem的任何信息,c#,outlook,outlook-addin,outlook-2013,C#,Outlook,Outlook Addin,Outlook 2013,我有一个outlook加载项,它运行在一堆文件夹中,将它们保存到磁盘,并将它们移动到垃圾箱文件夹 我添加的代码适用于99%的电子邮件。这组try缓存用于调试,因此请忽略它们 它每天提取几千封邮件,除了一个文件夹中的邮件外,它可以处理所有邮件 我检查项目是否为MailItems,并且所有内容都已签出,但一旦我尝试获取它的属性,它就会给我此类错误 不支持此类接口(HRESULT的异常:0x80004002 (电子接口) 上午10:57:51:在 Microsoft.Office.Interop.Ou

我有一个outlook加载项,它运行在一堆文件夹中,将它们保存到磁盘,并将它们移动到垃圾箱文件夹

我添加的代码适用于99%的电子邮件。这组try缓存用于调试,因此请忽略它们

它每天提取几千封邮件,除了一个文件夹中的邮件外,它可以处理所有邮件

我检查项目是否为MailItems,并且所有内容都已签出,但一旦我尝试获取它的属性,它就会给我此类错误

不支持此类接口(HRESULT的异常:0x80004002 (电子接口)

上午10:57:51:在 Microsoft.Office.Interop.Outlook.\u MailItem.get\u ReceivedTime()

该方法会根据我尝试访问的内容进行更改

我们已经为此寻找了一段时间的解决方案,但没有结果

请帮忙

 while (unreadFolders.Count > 0 && count < COUNT)
            {
                Outlook.Folder currentFolder = unreadFolders.FirstOrDefault().Key;
                string path = unreadFolders.FirstOrDefault().Value;
                Debug.WriteLine("reading folder: " + currentFolder.Name);
                unreadFolders.Remove(currentFolder);

                Outlook.Folder parent = GetParent(currentFolder);
                var t = parent?.FullFolderPath;
                //replenish the list
                foreach (Outlook.Folder f in currentFolder.Folders) unreadFolders.Add(f, path + "\\" + f.Name);

                //create directory if it doesnt exist
                Directory.CreateDirectory(path);

                Outlook.Items items = currentFolder.Items;
                foreach (var item in items)
                {
                    if (item != null && item is Outlook.MailItem)
                    {
                        if (count++ > COUNT) break;
                        var mailItem = (Outlook.MailItem)item;
                        if (mailItem == null) continue;
                        var fullpath = path + "\\";
                        try
                        {
                            fullpath += "[(R)" + mailItem.ReceivedTime.ToWeirdDateFormat() + "]";
                        }
                        catch (Exception ex)
                        {
                            using (StreamWriter file = new StreamWriter(@"C:\\temp\logs.txt", true))
                            {
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\tReceived Time Broken");
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.Message);
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.StackTrace);
                            }
                        }
                        try
                        {
                            fullpath += "[(T)" + mailItem.To.MakeWindowsSafe() + "]";
                        }
                        catch (Exception ex)
                        {
                            using (StreamWriter file = new StreamWriter(@"C:\\temp\logs.txt", true))
                            {
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\tTo Broken");
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.Message);
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.StackTrace);
                            }
                        }
                        try
                        {
                            fullpath += "[(F)" + mailItem.SenderName.MakeWindowsSafe() + "]";
                        }
                        catch (Exception ex)
                        {
                            using (StreamWriter file = new StreamWriter(@"C:\\temp\logs.txt", true))
                            {
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\tSender name Broken");
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.Message);
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.StackTrace);
                            }
                        }
                        try
                        {
                            fullpath += "[+][(S)" + mailItem.Subject.MakeWindowsSafe() + "]";
                        }
                        catch (Exception ex)
                        {
                            using (StreamWriter file = new StreamWriter(@"C:\\temp\logs.txt", true))
                            {
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\tSubject Broken");
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.Message);
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + ex.StackTrace);
                            }
                        }
                        fullpath += ".msg";
                        //save message to directory
                        mailItem.SaveAs(fullpath, Outlook.OlSaveAsType.olMSG);

                        //move message to deleted
                        if (parent == null)
                        {
                            using (StreamWriter file = new StreamWriter(@"C:\\temp\logs.txt", true))
                            {
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\tParent Null");
                                file.WriteLine(DateTime.Now.ToLongTimeString() + ":\t\t" + currentFolder.FullFolderPath);
                            }
                        }
                        else
                        {
                            mailItem.Move(parent.Folders["Deleted Items"]);
                        }
                    }
                }
            }
while(unreadFolders.Count>0&&Count计数)中断;
var mailItem=(Outlook.mailItem)项;
如果(mailItem==null)继续;
var fullpath=path+“\\”;
尝试
{
完整路径+=“[(R)”+mailItem.ReceivedTime.TowerdDateFormat()+“]”;
}
捕获(例外情况除外)
{
使用(StreamWriter file=newstreamwriter(@“C:\\temp\logs.txt”,true))
{
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t接收时间已中断”);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.Message);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.StackTrace);
}
}
尝试
{
完整路径+=“[(T)”+mailItem.To.MakeWindowsSafe()+“]”;
}
捕获(例外情况除外)
{
使用(StreamWriter file=newstreamwriter(@“C:\\temp\logs.txt”,true))
{
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\tTo已断开”);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.Message);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.StackTrace);
}
}
尝试
{
完整路径+=“[(F)”+mailItem.SenderName.MakeWindowsSafe()+“]”;
}
捕获(例外情况除外)
{
使用(StreamWriter file=newstreamwriter(@“C:\\temp\logs.txt”,true))
{
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t文件夹名称已断开”);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.Message);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.StackTrace);
}
}
尝试
{
完整路径+=“[+][(S)”+mailItem.Subject.MakeWindowsSafe()+“]”;
}
捕获(例外情况除外)
{
使用(StreamWriter file=newstreamwriter(@“C:\\temp\logs.txt”,true))
{
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t对象已断开”);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.Message);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+ex.StackTrace);
}
}
完整路径+=“.msg”;
//将邮件保存到目录
SaveAs(完整路径,Outlook.OlSaveAsType.olMSG);
//将邮件移动到已删除的位置
如果(父项==null)
{
使用(StreamWriter file=newstreamwriter(@“C:\\temp\logs.txt”,true))
{
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t租金为空);
file.WriteLine(DateTime.Now.ToLongTimeString()+“:\t\t“+currentFolder.FullFolderPath);
}
}
其他的
{
mailItem.Move(父文件夹[“已删除邮件”]);
}
}
}
}

检查邮件的值