Как программное чтение электронной почты Outlook с использованием C# работает в один день и перестает работать в другой ⇐ C#
-
Гость
Как программное чтение электронной почты Outlook с использованием C# работает в один день и перестает работать в другой
Моя цель — автоматизировать чтение электронных писем Outlook с помощью моего сценария C#. На прошлой неделе все работало как надо, без проблем. С начала этой недели я получаю ошибку ниже: «Не удалось получить фабрику классов COM для компонента с CLSID из-за следующей ошибки: 80080005 Ошибка выполнения сервера» Мой код ниже:
с использованием системы; использование System.Collections.Generic; использование System.Runtime.InteropServices; используя olook = Microsoft.Office.Interop.Outlook; пространство имен ReadingEmails { Программа внутреннего класса { общедоступная статическая (строка[], olook.MailItem[]) ReadMail() { пытаться { List bodyList = новый List(); List emailList = новый список(); olook.Application OutlookApp = новый olook.Application(); olook.Folder inbox = OutlookApp.Session.GetDefaultFolder(olook.OlDefaultFolders.olFolderInbox) как olook.Folder; olook.Folders childFolders = inbox.Folders; foreach (папка olook.Folder в дочерних папках) { //Причина этого в том, что если у нас есть правило Outlook для автоматизации перемещения электронных писем в определенные //папка, в которой будет меньше писем, чем в папке «Входящие», по которой будет перемещаться скрипт если (folder.Name == "testFolder") { //Извлечение почтовых отправлений из папки olook.Items mailItems =folder.Items; foreach (элемент объекта в mailItems) { если (элемент — olook.MailItem) { olook.MailItem mailItem = (olook.MailItem) элемент; //Будем просматривать только электронные письма со строкой темы: Входящие2 вручную. //Просматриваем только непрочитанные письма, иначе у нас будет бесконечный цикл //отправляемых писем if (mailItem != null && mailItem.Subject != null && mailItem.UnRead) { если (mailItem.Subject.Contains("Входящие")) { //не будет просматривать электронные письма, которые являются ответами или переадресацией. в противном случае //у нас будет бесконечный цикл отправки писем пытаться { if (!mailItem.Subject.Contains("RE:") || !mailItem.Subject.Contains("FW:")) { Console.WriteLine(DateTime.Now + ": Найдено электронное письмо"); bodyList.Add(mailItem.Body); emailList.Add(mailItem); //делаем электронную почту прочитанной, чтобы избежать бесконечных циклов обработки писем //послан mailItem.UnRead = ложь; } } catch (System.Exception ex) { Console.WriteLine(ex.Message); } } } } } } } Маршал.ReleaseComObject(outlookApp); return (bodyList.ToArray(), emailList.ToArray()); } catch (System.Exception ex) { Console.WriteLine(ex.Message); } возврат (ноль, ноль); } static void Main(string[] args) { (string[] bodyArray, olook.MailItem[] электронные письма) = ReadMail(); Консоль.ReadLine(); } } } Выбрана моя библиотека Microsoft.Office.Interop.Outlook.dll. Я использую версию файла 14.0. У меня установлены последние версии приложения Outlook на моей виртуальной машине. У меня нет обновлений Windows. Я перезапустил свою виртуальную машину. Я не понимаю, почему это работало, а теперь не работает.
Моя цель — автоматизировать чтение электронных писем Outlook с помощью моего сценария C#. На прошлой неделе все работало как надо, без проблем. С начала этой недели я получаю ошибку ниже: «Не удалось получить фабрику классов COM для компонента с CLSID из-за следующей ошибки: 80080005 Ошибка выполнения сервера» Мой код ниже:
с использованием системы; использование System.Collections.Generic; использование System.Runtime.InteropServices; используя olook = Microsoft.Office.Interop.Outlook; пространство имен ReadingEmails { Программа внутреннего класса { общедоступная статическая (строка[], olook.MailItem[]) ReadMail() { пытаться { List bodyList = новый List(); List emailList = новый список(); olook.Application OutlookApp = новый olook.Application(); olook.Folder inbox = OutlookApp.Session.GetDefaultFolder(olook.OlDefaultFolders.olFolderInbox) как olook.Folder; olook.Folders childFolders = inbox.Folders; foreach (папка olook.Folder в дочерних папках) { //Причина этого в том, что если у нас есть правило Outlook для автоматизации перемещения электронных писем в определенные //папка, в которой будет меньше писем, чем в папке «Входящие», по которой будет перемещаться скрипт если (folder.Name == "testFolder") { //Извлечение почтовых отправлений из папки olook.Items mailItems =folder.Items; foreach (элемент объекта в mailItems) { если (элемент — olook.MailItem) { olook.MailItem mailItem = (olook.MailItem) элемент; //Будем просматривать только электронные письма со строкой темы: Входящие2 вручную. //Просматриваем только непрочитанные письма, иначе у нас будет бесконечный цикл //отправляемых писем if (mailItem != null && mailItem.Subject != null && mailItem.UnRead) { если (mailItem.Subject.Contains("Входящие")) { //не будет просматривать электронные письма, которые являются ответами или переадресацией. в противном случае //у нас будет бесконечный цикл отправки писем пытаться { if (!mailItem.Subject.Contains("RE:") || !mailItem.Subject.Contains("FW:")) { Console.WriteLine(DateTime.Now + ": Найдено электронное письмо"); bodyList.Add(mailItem.Body); emailList.Add(mailItem); //делаем электронную почту прочитанной, чтобы избежать бесконечных циклов обработки писем //послан mailItem.UnRead = ложь; } } catch (System.Exception ex) { Console.WriteLine(ex.Message); } } } } } } } Маршал.ReleaseComObject(outlookApp); return (bodyList.ToArray(), emailList.ToArray()); } catch (System.Exception ex) { Console.WriteLine(ex.Message); } возврат (ноль, ноль); } static void Main(string[] args) { (string[] bodyArray, olook.MailItem[] электронные письма) = ReadMail(); Консоль.ReadLine(); } } } Выбрана моя библиотека Microsoft.Office.Interop.Outlook.dll. Я использую версию файла 14.0. У меня установлены последние версии приложения Outlook на моей виртуальной машине. У меня нет обновлений Windows. Я перезапустил свою виртуальную машину. Я не понимаю, почему это работало, а теперь не работает.
Мобильная версия