Сбой при поиске по электронной почте в Outlook - PullRequest
0 голосов
/ 28 октября 2019

Я работаю над кодом, который получает список и проверяет, есть ли элементы в темах электронных писем, я пытаюсь просмотреть все электронные письма, чтобы сравнить со списком, но программа вылетает после 190 электронных писем или около того (есть 289электронные письма в папке)

Я искал в Интернете решения этой проблемы, и у меня ничего не получалось

oApp = new Microsoft.Office.Interop.Outlook.Application();

        // Get the MAPI namespace.
        oNS = oApp.GetNamespace("mapi");

        // Log on by using the default profile or existing session (no dialog box).
        oNS.Logon(Missing.Value, Missing.Value, false, true);

        // Alternate logon method that uses a specific profile name.
        // TODO: If you use this logon method, specify the correct profile name
        // and comment the previous Logon line.
        //oNS.Logon("profilename",Missing.Value,false,true);

        //Get the Inbox folder.
        oInbox = oNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        //Get the Items collection in the Inbox folder.
        oItems = oInbox.Items;
        MessageBox.Show(oItems.Count+"");
        oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oItems.GetLast();
public void SearchEmail()
        {
            if (counter<oItems.Count)
            {
                try
                {
                    string s;

                    if (oMsg != null)
                    {
                        s = oMsg.Subject;



                        for (int i = 0; i < allTickets.Count; i++)
                        {
                            label2.Text = oMsg.Subject;
                            string ticketID = allTickets[i].ToString();
                            if (s.Contains(ticketID) && oMsg.UnRead)
                            {
                                unreadTickets.Add(ticketID);
                            }
                        }
                    }

                        oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oItems.GetPrevious();

                        counter++;
                        button2.Text = counter + "";




                }

                //Error handler.
                catch (Exception x)
                {
                     //MessageBox.Show(x.ToString());
                }
            }
        }

исключение уловки дает мне следующее:

невозможно выполнить комобъект типа 'system .__ comobject' к типу интерфейса 'microsoft.office.interop.outlook

и после этого я получаю эту ошибку:

ссылка на объект nullreferenceexception не установлена ​​на экземпляр объекта

1 Ответ

0 голосов
/ 28 октября 2019

Помните, что Входящие могут содержать элементы, отличные от MailItem, такие как ReportItem или MeetingItem. Это объясняет ошибку приведения. Вам нужно рассматривать элементы как универсальный объект и читать свойство Class (доступное для всех объектов OOM), используя отражение - если оно равно 43 (olMailItem), вы можете привести его к MailItem. Или вы можете использовать оператор «as» и проверить на ноль.

Также имейте в виду, что коллекция Items не сортируется ни в каком конкретном порядке, если вы сначала не вызовете Items.Sort и не определите порядок сортировки;иначе то, что вы получите от Items.GetLast, не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...