Interop.Outlook продолжать работать - PullRequest
0 голосов
/ 02 октября 2018

Привет,

У меня проблема с Interop.Outlook, и я не могу найти решение.Поэтому я запускаю свое приложение, где фильтрую разные учетные записи Outlook с Interop.Outlook и получаю электронные письма, когда это необходимо.При запуске приложения откройте Outlook и получите учетную запись для фильтрации.Также я использую приложение Outlook для нормальных работ.Поэтому иногда фильтр не работает, и я думаю, что когда я закрываю приложение Outlook, оно закрывается и в моем приложении Interop.Outlook, поэтому мне нужно перезапустить приложение, чтобы запустить фильтр.

Есть у кого-нибудь какие-нибудь идеипродолжать работать с этим или решениями, чтобы избежать закрытия Interop.Outlook?

Application olApp; Account Acc; Items itemsInbox; MAPIFolder inbox;

    public void FilterMain()
    {
        olApp = new Application();

        Accounts accounts = olApp.Session.Accounts;
        foreach (Account acc in accounts)
        {
            if (acc.SmtpAddress.ToLower() == "mail@mail.com")
            {
                Acc = acc;
                break;
            }
        }
        if (Acc != null)
        {
            Folders rootFolders = Acc.Session.Folders;

            foreach (Folder fold in rootFolders)
            {
                if (fold.Name.ToLower() == "mail@mail.com")
                {

                    foreach (Folder f in fold.Folders)
                    {
                        if (f.Name == "Saapuneet") //Saapuneet
                        {
                            inbox = f;
                            itemsInbox = inbox.Items;
                            itemsInbox.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(ItemsInbox_ItemAdd);
                            break;
                        }
                    }
                }
            }
        }
    }

1 Ответ

0 голосов
/ 03 октября 2018

Во-первых, ваш код, который получает учетную запись, ничего не делает - вы никогда не используете переменную Acc.Обратите внимание, что Acc.Session совпадает с olApp.Session.Вы можете использовать Account.DeliverToStore, чтобы получить хранилище для этой учетной записи.Затем вы можете использовать Store.GetRootFolder() для извлечения своей папки верхнего уровня.

Во-вторых, Outlook закрывается, когда закрывается его последнее окно, даже если на какой-либо из его объектов имеются невыполненные ссылки COM.Это было сделано для защиты от ошибочных приложений, которые пропускали ссылки на COM-объекты.

Чтобы поддерживать Outlook в живых, ссылайтесь на любой из его Explorer или Inspector объектов - вы можете получить его из Application.ActiveExplorer или вызвать MAPIFolder.GetExplorer.Проводник не должен быть видимым.

...