2017-01-07 2 views
1

J'ai écrit un simple add-in VSTO pour Outlook 2016 (partie de office 365) pour vérifier si certaines adresses e-mail en dehors de notre société sont mélangées dans la liste des destinataires. J'ai simplifié le code comme ci-dessous:VSTO Outlook Addin: objet Item câblé dans les arguments Application_ItemSend

 int countExternalAddress; 
     string externalAddresses; 
     string internalDomain=“@example.com”; 
    //indicates the email domain of our company, we use exchange server. 

    private void Application_ItemSend(object Item, ref bool Cancel) 
    { 

     countExternalAddress = 0; 
     externalAddresses=""; 

     Outlook.MailItem item = (Outlook.MailItem)Item; 

     foreach (Outlook.Recipient recp in item.Recipients) 
     { 
      ConvertExchangeAddrToSMTPAddr(recp.AddressEntry.Address); 
      //by access ExchangeUser.PrimarySmtpAddress 
      CheckTheAddress(recp.AddressEntry.Address); 
     } 

     if (countExternalAddress > 0) 
     { 
      Warn(); 
     } 

    } 

Le code fonctionne sans problème la plupart du temps, mais quelques fois Warn fonction() affiche des avertissements sur la base (en partie) les destinataires du dernier e-mail, pas le courant un. Le problème ne peut pas être reproduit tout le temps, mais quand il se produit, la procédure est comme:

  1. Envoyer un e-mail à des destinataires internes (mes collègues, échanger des adresses), les adresses d'échange sont convertis avec succès à l'adresse SMTP, car ils sont prédéfinis en tant qu'adresse "interne", le mail sera envoyé sans avertissement.
  2. envoyer un autre courriel à d'autres destinataires internes, le programme affiche un avertissement de "adresse externe mélangée", et l'adresse "externe" provient du courriel envoyé précédemment (mentionné au 1 ci-dessus, pas toutes les adresses seulement) , et, l'adresse externe détectée est dans le format d'adresse d'échange qui est censé être converti au format de SMTP. Curieusement, je ne trouve pas l'adresse dans la liste des destinataires de l'e-mail actuel. Si je sauvegarde l'e-mail actuel et redémarre Outlook, lorsque je sélectionne l'e-mail enregistré et essaie de le renvoyer, aucune adresse "externe" de ce type ne sera détectée à nouveau. Il semblerait que l'objet Item transmis par l'objet ItemSend contienne certains destinataires non seulement de l'email actuel, mais aussi de l'email envoyé précédemment, mais ils ne sont pas visibles dans l'email actuel, de plus je ne trouve pas destinataires dans l'e-mail envoyé. Le PC de travail que j'utilise n'a pas d'environnement de débogage donc je manque de moyens. Merci de me donner votre aide, merci d'avance.

+0

Pourrait-il être lié au fait que j'ai supprimé le fichier .vsto après l'installation? Les fichiers dll sont copiés dans appdata/app après l'installation, donc je pense que le fichier .vsto n'est plus utile. –

Répondre

0

Aurait-il quelque chose à voir avec vous faire >

if (countExternalAddress > 0) { Warn(); }

et non ==

if (countExternalAddress == 0) 
    { 
     Warn(); 
    } 

semble étrange, mais il laisserait un plus email pour vous prévenir.

+0

Merci pour votre réponse rapide. mais == signifie qu'il n'y a pas d'adresse externe trouvée, donc je pense> est la bonne à utiliser? –

+0

Pas d'ami. Faites-moi savoir si cela fonctionne. Vous m'avez curieux maintenant. Si cela fonctionne, il doit y avoir plus d'éléments dans ce problème, qui vit probablement dans votre warn(); fonction. – MistaGoustan

+0

La fonction warn a juste un MessageBox avec un bouton Annuler. Je ne comprends toujours pas pourquoi tu penses que ça devrait être == pas>? En outre, je ne peux pas reproduire le problème sur ce PC dans ma maison ... –