SanketAB Ответов: 1

Определение типа элемента Outlook


Всем привет,

Просматривая входящие сообщения Outlook, я хочу проверить, является ли текущий элемент outlook mailitem или нет. Если это так, то работайте над этим; в противном случае пропустите и проверьте новую запись.
Вот как выглядит мой код

foreach (Outlook.MailItem mailitem in programobj.folder.Items)
{

    try
    {


        if (!(mailitem is Outlook.MailItem))
        {
          // skip...
            continue;
        }
       else
       {
         //work here
        }
  catch(exception e)
  {
    //some message or log
  }


Он работает очень хорошо, пока не найдет любую запись, отличную от mailitem, например элемент календаря, элемент заметки и т. д. Для таких предметов он дает мне исключение и цикл висит там сам
Это ошибка, которую я получаю:

Невозможно привести COM-объект типа ' System.__ComObject "к интерфейсу типа" Майкрософт.Офис.Взаимодействие.Прогноз.Сообщения'. Эта операция не удалась, так как вызов QueryInterface COM-компонента для интерфейса с IID '{00063034-0000-0000-C000-000000000046}' не удался из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).

Пожалуйста, помогите мне с этим. Я не могу сильно изменять код. Пожалуйста, дайте мне решение, где я могу проверить, является ли данный элемент mailitem или нет с простым if (условием) else...

Заранее спасибо!!!

1 Ответов

Рейтинг:
5

Thomas Duwe

Вы уже неявно бросаете каждый элемент в programobj.folder.Items к Outlook.MailItem введите заголовок цикла foreach (foreach (Outlook.MailItem mailitem in...)).

Попробовать это:

foreach (object item in programobj.folder.Items)
{
   try
   {
     if (item is Outlook.MailItem)
     {
       Outlook.MailItem mailitem = (Outlook.MailItem)item;
       // do something with mailitem
     }
   }
   catch(exception e)
   {
       //some message or log
   }


С уважением,

Томас.


SanketAB

@ Томас Дуве...
Спасибо большое...это решило мою проблему практически сразу...Спасибо снова