Доступ к контактам из файла .OST Office 2010/2013

1

Позвольте мне предисловие, сказав, что я не работаю с офисным COM-объектом и вообще стараюсь избегать его, как чуму. Я также знаю, что этот вопрос был доведен до смерти в отношении доступа к файлам.pst, однако после часа поиска в Google я еще не нашел много о.ost.

Я пытаюсь обновить метод в существующем приложении, приложение обращается к PST файлу и получает список имен контактов и электронных писем, которые будут использоваться в реализации автозаполнения. Недавно мы изменили с прямого IMAP-сервера Host Email на Microsoft Exchange, который изменяется с.pst на.ost файл

Это метод:

    var arrName = new List<string>();
    var arrEmail = new List<string>();
    try
    {
        var outlookApplication = new ApplicationClass();
        NameSpace mapiNamespace = outlookApplication.GetNamespace("MAPI");
        MAPIFolder contacts = mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);

         for (int i = 1; i < contacts.Items.Count + 1; i++)
         {
             var contact = (ContactItem) contacts.Items[i];
             arrName.Add(contact.FullName);
             arrEmail.Add(contact.Email1Address);
         }
            Global.ConName = arrName.ToArray();
          Global.ConEmail = arrEmail.ToArray();
        }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.ToString());
        //Error Logging
    }

Когда вызов вызывает следующую ошибку:

System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to 
interface type 'Microsoft.Office.Interop.Outlook.ContactItem'. 
This operation failed because the QueryInterface call on the COM 
component for the interface with IID '{00063021-0000-0000-C000-000000000046}' 
failed due to the following error: 
No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

at OPUSfin.LoginMain.GetEmailContactsFromOutlook() in PATH:line 81

Может ли кто-нибудь указать мне в правильном направлении, как я могу изменить это, чтобы работать с реализацией Exchange?

Спасибо

Ссылка: доступ к Outlook ost file Вопрос

Теги:
outlook
office-interop

1 ответ

1
Лучший ответ

Вы можете иметь объекты DistListItem, кроме ContactItem, которые ожидают ваш код.

Используйте оператор "как", чтобы проверить, действительно ли у вас объект ContactItem. Вы также можете кэшировать коллекцию Items перед входом в цикл:

Items items = contacts.Items;
for (int i = 1; i <= items.Count; i++)
{
    ContactItem contact = items[i] as ContactItem;
    if (contact !=null)
    {
       ...
    }
}
  • 0
    Спасибо работает без нареканий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню