2009-09-10 2 views
2

Я создаю Outlook addin, используя VS 2008 и C#. Чтобы функционировать, это дополнение проходит через все электронные письма с использованием Redemption и анализирует его.Outlook Addin получает доступ к получателю обмена в автономном режиме?

Я недавно столкнулся с проблемой, когда кто-то открыл внешний вид без сетевого подключения (сеть отключена, отключена от сети, или она мобильна, как ноутбук, и на данный момент у нее нет возможности подключения). Кажется, что он получает список получателей.

 
    System.Runtime.InteropServices.COMException (0x80040115): Error in IAddrBook::OpenEntry: MAPI_E_NETWORK_ERROR 
    Error: The connection to Microsoft Exchange is unavailable. Your network adapter does not have a default gateway. 
    Component: Microsoft Exchange Address Book 
     at Redemption.RDOAddressEntryClass.get_SMTPAddress() 

Это происходит в этом коде:

/// <summary> 
    /// Retrieves a list of recipient addresses from an RDOMail object 
    /// </summary> 
    /// <param name="rdoItem">The email to analyze</param> 
    /// <returns>A list of e-mail addresses</returns> 
    protected List<string> GetRecipients(RDOMail rdoItem) 
    { 
     RDORecipients recipients = rdoItem.Recipients; 
     List<string> recipientList = new List<string>(); 
     if (recipients != null && recipients.Count > 0) 
     { 
      for (int i = 1; i <= recipients.Count; i++) 
      { 
       RDOAddressEntry addressEntry = recipients[i].AddressEntry; 
       if (addressEntry != null) 
       { 
        string recipient = addressEntry.SMTPAddress; 
        recipient = recipient.Trim(); 
        if (recipient != null && recipient != String.Empty) 
        { 
         recipientList.Add(recipient); 
        } 

        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(addressEntry); 
        addressEntry = null; 
       } 
      } 
     } 

     if (recipients != null) 
     { 
      System.Runtime.InteropServices.Marshal.FinalReleaseComObject(recipients); 
      recipients = null; 
     } 

     return recipientList; 
    } 

Таким образом, вопрос, как я могу получить получатель электронной почты без необходимости проверки подлинности или разрешения от биржи и умирают, потому что нет сетевого подключения?

EDIT: В качестве альтернативы - есть ли способ кэшировать адреса электронной почты smtp в Outlook, чтобы, если он позже отправляется в автономный режим, ему не нужно разрешать адреса электронной почты?

+0

Вы пытались использовать Outlook в режиме кеширования? –

+0

Я стараюсь не работать с этим как предположение и найти обходное решение. – McAden

ответ

1

Я считаю, что некоторые провайдеры магазинов - это обертки вокруг основных хранилищ PST. Поэтому при доступе к определенным свойствам поставщик будет пытаться синхронизировать с удаленным сервером. Вы можете остановить это, развернув магазин у поставщика.

Примечание: если добавление элемента в развернутое хранилище не должно сохраняться, например, изменение на сервере (в случае IMAP4).

Подробнее о недвижимости UnwrapStore здесь на Redemption website

1

В большинстве случаев PR_SMTP_ADDRESS собственность должна быть доступна в таблице получателя. Вы можете получить доступ к этому свойству с помощью RDORecipient.Fields [] - нет причины использовать RDORecipient.AddressEntry (что приводит к тому, что Redemption вызывает IAddrbook :: OpenEntry, а вызов может выйти из строя в автономном режиме).

Посмотрите таблицу получателей с OutlookSpy (щелкните «Сообщение», перейдите на вкладку «GetRecipientTable»), чтобы убедиться, что свойство PR_SMTP_ADDRESS присутствует.

+0

Я могу подтвердить, что этого нет для Exchange. –

+0

Какую версию Outlook и Exchange вы используете? –

Смежные вопросы