PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Objet Automation et Outlook --> extraire information d'un mail
Objet Automation et Outlook --> extraire information d'un mail
Iniciado por Fany, 16,jul. 2019 17:34 - 3 respuestas
Miembro registrado
365 mensajes
Popularité : +12 (12 votes)
Publicado el 16,julio 2019 - 17:34
Bonjour à tous,

J'ai un code qui fonctionne pour récupérer les informations d'un mail au format .msg à un emplacement connu sur mon ordinateur (j'extrais les informations depuis le chemin d'accès du fichier .msg)

CheminMail est une chaîne = "C:\Users\*****\Desktop\monfichier.msg"
MonOutlook est un objet OLE "OutLook.Application"
MailItemLoad est un objet automation dynamique
MailItemLoad = MonOutlook>>CreateItemFromTemplate(CheminMail)

dDateReceptionMailLoad est une Date = MailItemLoad>>ReceivedTime
hHeureReceptionMailLoad est une Heure = MailItemLoad>>ReceivedTime
sExpediteurMailLoad est une chaîne = MailItemLoad>>SenderEmailAddress
sDestinataireMailLoad est une chaîne = MailItemLoad>>To
sContenuMailLoad est une chaîne = MailItemLoad>>HTMLBody
sObjetMailLoad est une chaîne = MailItemLoad>>Subject


Je voudrais maintenant faire la même chose, mais depuis un mail enregistré dans ma base de données sous une rubrique de type mémo binaire, MAIS sans extraire ce dernier dans un dossier temporaire (je sais que c'est probablement la seule solution, mais comme il y a des personnes très calés sur ce forum, ça ne coute rien de demander si il n'y a pas une technique plus efficace).

Je pense que ma demande est irréalisable, mais je tente quand même.

Est il possible de remplacer la syntaxe :
MailItemLoad = MonOutlook>>CreateItemFromTemplate(CheminMail)

par mon fichier contenu dans ma base de données, sans avoir à l'extraire dans un dossier temporaire ?

D'avance merci pour vos lumières,

Bonne fin de journée,

Fany
Mensaje modificado, 16,julio 2019 - 17:36
Miembro registrado
506 mensajes
Popularité : +18 (18 votes)
Publicado el 17,julio 2019 - 11:17
Bonjour Fany,

La seule manière que je connaisse actuellement est d'utiliser RDO, une bibliothèque COM de Outlook Redemption.
http://www.dimastr.com/redemption/home.htm

Outlook Redemption à l'origine est une bibliothèque qui permet de contourner le verrou sécuritaire lorsqu'on veut piloter MS Outlook via l'automation.
Mais c'est beaucoup plus que ça, car il offre en plus un modèle objet indépendant très complet qui permet de travailler avec des conteneurs MAPI (CDO, Exchange, fichier PST...) et aussi les e-mails. et divers formats de données.
Redemption est payant mais la version développeur est gratuite, je l'utilise pour mes développement d'outils internes.
Malgré tout, la richesse du produit mérite largement le prix d'une licence, sachant que la licence n'est pas restrictive en nombre d'utilisateurs et qu'il n'y a aucune redevance.

Evidemment, le temps à investir pour maîtriser RDO est assez conséquent. Ce qui doit être pris en compte pour décider de s'orienter dans cette direction.

Pour en revenir à ta question, dans RDO, il y a la classe RDOFolder2 qui dispose de la méthode Import(). cette méthode peut importer un e-mail qui est stocké en mémoire (type variant contenant un tableau d'octets) ou encore qui peut être lu via un objet qui implémente l'interface COM IStream.
L'objet Folder où l'import a lieu peut être un dossier Outlook, un dossier Exchange ou un dossier d'un fichier PST local, par exemple.

Extrait de la documentation pour la méthode Import() :
http://www.dimastr.com/redemption/RDOFolder.htm…

Import(Source, Type, Flags)

Imports from the specified file, IStream COM interface, or from a variant array of byte or of variant)  
One or more new items in the folder are created and returned as an RDOItems collection.
All import formats supported by RDOMail.Import are supported by this method.  
The method allows to import iCal files with multiple events or vCard files with multiple contacts. 
For all other formats, a single new item is created. 
Flags parameter allow to specify what gets imported and how the new items in the folder are created.
 
Source - string (file name), IStream COM interface, or a variant array (only variant array of byte 
or a variant array of variant are supported)
 
Type - one of the rdoSaveAsType constants. See RDOMail.Import for the list of supported file formats.
For the olICal and olVCard formats, this method supports multiple entities in a single file.
 
Flags - variant, optional. 
A bitmask of the rdoImportFlags enum constants.
If not specified, all MIME parts are imported (for the olRfc822 import format). 
If neither ifCreateUnsent  nor ifCreateSent  is set, the RDOMail.Sent property value 
will be determined by the default value of the parent store 
or (in case of MIME import) X-Unsent MIME header.
 
//MIME import flags
ifPlainBody = 1
ifHTMLBody = 2
ifHeaders = 4
ifRecipients = 8
ifAttachments = 16
ifHtmlImages = 32
//How the item items are created
ifCreateUnsent = 64
ifCreateSent = 128


:)

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Mensaje modificado, 17,julio 2019 - 11:21
Miembro registrado
90 mensajes
Popularité : +7 (7 votes)
Publicado el 17,julio 2019 - 14:55
Bonjour Fanny

OutlookRedemption est effectivement un super outil , qui permet notamment de passer outre certains messages d'alerte de sécurité d'Outllook, et je l'utilise dans tous mes projets. Mais même en RDO les fonctions GetMessageFromMsgFile(FileName, CreateNew) & CreateMessageFromMsgFile(FileName, MessageType, FileFormat) attendent au moins le nom d'un fichier physique.

Mais, s'il s'agit de créer un mail à partir d'un modèle concernant formatage du texte du mail , avez vous envisagé de sauver le corps du modèle au format HTML ou RTF et le stocker dans un mémo texte pour l'affecter :

- soit à la propriété HTMLBody d'un objet MailItem d'Outlook
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff868941(v=office.14)

- soit à la propriété RTFBody du même objet
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff867828(v=office.14)


Bon développement
Publicado el 19,septiembre 2019 - 20:12
Bonjour Fany,

dans le cadre d'une application nous avons une gestion documentaire qui ouvre un message et l'affiche.
ma première question est que passes-tu comme code lors de l'appel CreateItemFromTemplate(CheminMail) ?
MailItemLoad = MonOutlook>>CreateItemFromTemplate(CheminMail)

Cordialement

Benoît