Récupération constante de & # 8220; De & # 8221; adresses e-mail à travers les versions Outlook

StackOverflow https://stackoverflow.com/questions/112227

  •  02-07-2019
  •  | 
  •  

Question

Je travaille dans une application de bureau autonome c # qui envoie des documents, puis les importe depuis Outlook lorsqu'ils sont renvoyés. L’application récupère les e-mails d’un dossier spécifié, les traite puis enregistre le nom de l’expéditeur ainsi que d’autres éléments dans une base de données.

Cela fonctionne bien pour Outlook 2003 et 2007, qui possède la propriété SenderEmailAddress. Toutefois, Outlook 2000 et XP ne possèdent pas cette propriété et ne renverront pas systématiquement nom@domaine.com. Je fournis un support pour ces versions.

J'ai découvert qu'une bibliothèque appelée Outlook Redemption résoudrait ce problème, mais je développe en .net et je veux vraiment éviter d'écrire dans les registres de clients. J'ai aussi trouvé MAPI33 un wrapper .Net autour de MAPI, mais les forums ne nous ont pas dit s'il était toujours pris en charge.

Apprécierait toute indication quant à une alternative .Net à la dll Redemption ou à une méthode permettant de récupérer systématiquement une adresse électronique dans les versions d'Outlook.

Merci beaucoup

AbsFabs

Épilogue: Je me suis retrouvé avec une solution de cet article http://support.microsoft.com/kb/324530. Cela consistait à créer une réponse, puis à extraire la réponse à l'adresse du mailitem créé. Cela a bien fonctionné pour les courriels envoyés sur Internet et fait actuellement l'objet de tests par Exchange Server.

J'ai également trouvé cela lors de mes voyages http://anoriginalidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of- un-échange-expéditeur-d'un-mailitem-de-perspectives-en-vbnet-vsto / semble être une touche impliquée. Cela pourrait comprendre mon plan B si mon implémentation existante ne survit pas aux tests.

Merci pour vos commentaires

AbsFabs

J'ai finalement utilisé Redemption. Excellent outil pour le travail. Mon problème était d'avoir à enregistrer la dll lorsque mon application a été installée. Depuis que mon application est écrite en dotnet, il n'est pas nécessaire d'enregistrer quoi que ce soit. J'ai pu contourner le problème d'enregistrement de DLL avec COM sans registre.

Merci beaucoup pour votre inspiration.

Était-ce utile?

La solution

J'utilise la solution Outlook Redemption dans un code de production C #. Cela fonctionne à merveille. Avec celui-ci, vous pouvez obtenir le SenderID d’un message électronique (IRDOMail), puis utiliser la méthode GetAddressEntryFromID () de l’objet IRDOSession.

Autres conseils

Alors que nous avions un problème similaire au travail, nous avons décidé d’utiliser la route netMAPI, ce qui a posé quelques problèmes.

Le principal problème, c'est que MAPI gérait sa propre mémoire, tout comme .NET, ce qui signifie qu'occasionnellement (environ 300 personnes utilisent notre logiciel maison), notre application se plantait, générant le rapport d'erreur de Windows. dialogue plutôt que notre propre dialogue de suivi des bogues. Cela a été causé par le remplacement par deux des tas de mémoire.

Comme nous devons utiliser un serveur Exchange, nous avons effectué quelques recherches et découvert que, si vous écriviez le code MAPI dans une application VB6, celui-ci disposerait de son propre espace mémoire et ne remplacerait donc pas le tas .NET.

C’est une façon de faire assez longue, mais jusqu’à présent, nous n’avons rencontré aucun problème et des centaines (voire des milliers) de courriels sont envoyés chaque jour par notre personnel.

La bonne nouvelle est que vous êtes sur la bonne voie en recherchant les bonnes interfaces. La mauvaise nouvelle est que 2000 et XP sont très mal pris en charge dans .NET car ils sont arrivés avant .NET et ce n’est qu’en 2003 qu’ils ont réellement essayé de faire fonctionner COM dans .NET.

Votre solution pour ces versions 2000 et XP consistera à rechercher les bonnes interfaces COM et à les emballer vous-même. J'ai eu à le faire plusieurs fois pour ces versions d'Outlook et ce n'est jamais joli. Alors bonne chance.

Rachat peut être utilisé sans l'installer dans le registre. Vous pouvez utiliser RedemptionLoader en C #, VB.Net, Delphi et C ++.

//tell the app where the 32 and 64 bit dlls are located
//by default, they are assumed to be in the same folder as the current assembly and be named 
//Redemption.dll and Redemption64.dll.  
//In that case, you do not need to set the two properties below
RedemptionLoader.DllLocation64Bit = @"c:\SourceCode\Redemption\redemption64.dll";
RedemptionLoader.DllLocation32Bit = @"c:\SourceCode\Redemption\redemption.dll";
//Create a Redemption object and use it
RDOSession session =  RedemptionLoader.new_RDOSession();
session.Logon(Missing.Value, Missing.Value,  Missing.Value, Missing.Value, Missing.Value,  Missing.Value);

Je ne les ai jamais utilisées, mais vous pouvez essayer Outlook Objets de données de collaboration (CDO). Auparavant, ils étaient un complément que vous pouviez installer avec Outlook, mais ils sont maintenant fournis séparément.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top