Outlook Addin получает доступ к получателю обмена в автономном режиме? - PullRequest
2 голосов
/ 11 сентября 2009

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

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

  
    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;
    }

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

РЕДАКТИРОВАТЬ: В качестве альтернативы - есть ли способ кэшировать адреса электронной почты SMTP в Outlook, так что если он позже переходит в автономный режим, ему не нужно разрешать адреса электронной почты?

Ответы [ 2 ]

1 голос
/ 09 октября 2014

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

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

1 голос
/ 08 октября 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...