2009-09-10 3 views
2

Je crée un addin Outlook en utilisant VS 2008 et C#. Afin de fonctionner cet addin passe par tous les e-mails en utilisant Redemption et l'analyse.Outlook Addin accéder au destinataire Exchange en mode hors connexion?

J'ai récemment rencontré le problème de l'ouverture de perspectives sans connexion réseau (réseau déconnecté, débranché, ou mobile comme un ordinateur portable et qui n'a pas de connectivité pour le moment). Il semble s'agir d'obtenir une liste des bénéficiaires.

 
    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() 

Ce qui se passe dans ce code:

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

La question est, comment puis-je obtenir les destinataires d'un e-mail sans avoir besoin d'authentifier ou de résoudre d'Exchange et mourir à cause il n'y a pas de connexion réseau?

EDIT: Autrement - existe-t-il un moyen de mettre en cache les adresses de messagerie smtp dans Outlook afin que, s'il se déconnecte plus tard, il n'ait pas à résoudre les adresses de messagerie?

+0

Avez-vous essayé d'utiliser Outlook en mode caché? –

+0

J'essaie de ne pas utiliser cela comme une hypothèse et de trouver une solution de contournement. – McAden

Répondre

1

Je crois que certains fournisseurs de magasins sont des wrappers autour des magasins PST sous-jacents. Par conséquent, lors de l'accès à certaines propriétés, le fournisseur tentera de se synchroniser avec le serveur distant. Vous devriez être capable d'arrêter cela en déballant le magasin du fournisseur.

Remarque: l'ajout d'un élément à un magasin non emballé ne doit pas persister et être remplacé par le serveur (dans le cas d'IMAP4, par exemple).

En savoir plus sur la propriété UnwrapStore ici à la plupart des cas Dans Redemption website

1

PR_SMTP_ADDRESS propriété devrait être disponible dans le tableau bénéficiaire. Vous pouvez accéder à cette propriété à l'aide de RDORecipient.Fields [] - il n'y a aucune raison d'utiliser RDORecipient.AddressEntry (qui provoque Redemption pour appeler IAddrbook :: OpenEntry et l'appel peut échouer en mode hors connexion).

Examinez la table de destinataires avec OutlookSpy (cliquez sur IMessage, accédez à l'onglet GetRecipientTable) pour vous assurer que la propriété PR_SMTP_ADDRESS est présente.

+0

Je peux confirmer que ce n'est pas présent pour Exchange. –

+0

Quelle version d'Outlook et d'Exchange utilisez-vous? –

Questions connexes