Modifier le contenu d'un mail reçu via VBA

Le
Fabrice N.
Bonjour à tous,

Voilà mon idée
Sous outlook 2003, je voudrais créer une macro que je déclencherais
depuis un mail ouvert ( maintenant je sais faire ;-) merci Géo )
pour supprimer les PJ et ajouter le nom de ces PJ dans le texte du
message afin de garder l'info et gagner de la place dans ma boîte
Le beurre, l'argent du beurre, ;-)

Là où j'ai un doute, c'est pour ajouter le nom des PJ dans le message.
Pour le texte brut, ça doit aller, mais pour un message en HTML,
j'aurais besoin de quelque tuyau.

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de
connaître le format du mail en question et c'est le Mail.HTMLBody qu'il
faudra modifier
Mais au stade où j'en suis, j'ai l'impression qu'il faut décortiquer ce
que je récupère pour aller intégrer ça après les premiers flag

Je cherche juste à ajouter un peu de texte en tout début de message ou
tout à la fin avec une police et une couleur particulière
Je suis obligé d'en passer par là ou il y a plus simple ?

Merci d'avance pour vos conseils
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #328853

Bonjour à tous,

Voilà mon idée...
Sous outlook 2003, je voudrais créer une macro que je déclencherais depuis un mail
ouvert ( maintenant je sais faire ;-)... merci Géo ) pour supprimer les PJ et ajouter
le nom de ces PJ dans le texte du message afin de garder l'info et gagner de la place
dans ma boîte...
Le beurre, l'argent du beurre,... ;-)

Là où j'ai un doute, c'est pour ajouter le nom des PJ dans le message.
Pour le texte brut, ça doit aller, mais pour un message en HTML, j'aurais besoin de
quelque tuyau.

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de connaître le format du
mail en question et c'est le Mail.HTMLBody qu'il faudra modifier...
Mais au stade où j'en suis, j'ai l'impression qu'il faut décortiquer ce que je récupère
pour aller intégrer ça après les premiers flag...

Je cherche juste à ajouter un peu de texte en tout début de message ou tout à la fin
avec une police et une couleur particulière...
Je suis obligé d'en passer par là ou il y a plus simple ?

Merci d'avance pour vos conseils...


Si c'est juste pour ajouter du texte, il me semble qu'on peut le faire
sur Mail.Body.
Pour le mettre en forme, c'est un peu plus compliqué.
Regardez un exemple d'Oliv' pour ajouter le nom des copies cachées.

Il y a aussi la solution de faire une pièce jointe fantôme (quelques
caractères en txt par exemple) avec un nom significatif.

--
A+

JièL
Le #328819
Hello Geo et Fabrice

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de
connaître le format du mail en question et c'est le Mail.HTMLBody
qu'il faudra modifier...
Mais au stade où j'en suis, j'ai l'impression qu'il faut décortiquer
ce que je récupère pour aller intégrer ça après les premiers flag...

Je cherche juste à ajouter un peu de texte en tout début de message ou
tout à la fin avec une police et une couleur particulière...
Je suis obligé d'en passer par là ou il y a plus simple ?

Merci d'avance pour vos conseils...


Si c'est juste pour ajouter du texte, il me semble qu'on peut le faire
sur Mail.Body.


Pour faire avancer le schimilblic, y'a la macro d'anacoluthe qui ajoute
le nom de la PJ dans les mails en HTML
http://faq.outlook.free.fr/readarticle.php?article_idI

--
JièL / Jean-Louis GOUBERT
Là bas mieux qu'en face ;-) http://forums.offices.free.fr/
La NOUVELLE Faq Outlook est là : http://faq.outlook.free.fr/index.php
Les stats de CDO : http://faq.outlook.free.fr/cdo/


Fabrice N.
Le #328639
Bonjour JièL,
Hello Geo et Fabrice

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de connaître
le format du mail en question et c'est le Mail.HTMLBody qu'il faudra
modifier...
Mais au stade où j'en suis, j'ai l'impression qu'il faut décortiquer ce
que je récupère pour aller intégrer ça après les premiers flag...

Je cherche juste à ajouter un peu de texte en tout début de message ou
tout à la fin avec une police et une couleur particulière...
Je suis obligé d'en passer par là ou il y a plus simple ?

Merci d'avance pour vos conseils...


Si c'est juste pour ajouter du texte, il me semble qu'on peut le faire sur
Mail.Body.


Pour faire avancer le schimilblic, y'a la macro d'anacoluthe qui ajoute le
nom de la PJ dans les mails en HTML
http://faq.outlook.free.fr/readarticle.php?article_idI


Ben merde alors, moi qui croyais avoir eu une idée originale... ;-)

Pourtant, je te promets JièL, j'ai été voir dans ta FAQ avant de
poster... mais je l'ai pas vu cet article... :-(

Tu vois que j'arrête pas de faire et dire des conneries... sur ta faq
et ici aussi...

Faut vraiment que j'arrête, je deviens tellement fainéant que je ne
prends plus le temps de chercher... :-(

Je m'auto vire d'ici... ;-)



Oliv'
Le #328778
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour JièL,
Hello Geo et Fabrice

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de
connaître le format du mail en question et c'est le Mail.HTMLBody
qu'il faudra modifier...
Mais au stade où j'en suis, j'ai l'impression qu'il faut
décortiquer ce que je récupère pour aller intégrer ça après les
premiers flag... Je cherche juste à ajouter un peu de texte en tout
début de
message ou tout à la fin avec une police et une couleur
particulière... Je suis obligé d'en passer par là ou il y a plus simple
?

Merci d'avance pour vos conseils...


Si c'est juste pour ajouter du texte, il me semble qu'on peut le
faire sur Mail.Body.


Pour faire avancer le schimilblic, y'a la macro d'anacoluthe qui
ajoute le nom de la PJ dans les mails en HTML
http://faq.outlook.free.fr/readarticle.php?article_idI


Ben merde alors, moi qui croyais avoir eu une idée originale... ;-)

Pourtant, je te promets JièL, j'ai été voir dans ta FAQ avant de
poster... mais je l'ai pas vu cet article... :-(

Tu vois que j'arrête pas de faire et dire des conneries... sur ta faq
et ici aussi...

Faut vraiment que j'arrête, je deviens tellement fainéant que je ne
prends plus le temps de chercher... :-(

Je m'auto vire d'ici... ;-)



Allez je veux bien vous donner mon code qui marche sur html et brut.
http://faq.outlook.free.fr/readarticle.php?article_id3
c'est là depuis 1 mois ;-)))
d'ailleurs c'est insipré d'anacoluthe

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Fabrice N.
Le #328776
Bonjour Oliv',

Allez je veux bien vous donner mon code qui marche sur html et brut.
http://faq.outlook.free.fr/readarticle.php?article_id3
c'est là depuis 1 mois ;-)))
d'ailleurs c'est insipré d'anacoluthe


Putain, quand je penses que je viens de changer mes lunettes...
C'est pas possible, ça doit pas être la bonne correction... :-(

En tout cas, merci à tous les 2 pour les infos... c'est tout bon, j'ai
quasiment fini ce que je voulais faire...

Je suppose que c'est pas la peine que je publi ce que j'ai fait vu
qu'il y a l'air d'y avoir déjà tout ce qu'il faut sur la FAQ Outlook...
;-)

A+

Oliv'
Le #328775
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour Oliv',

Allez je veux bien vous donner mon code qui marche sur html et brut.
http://faq.outlook.free.fr/readarticle.php?article_id3
c'est là depuis 1 mois ;-)))
d'ailleurs c'est insipré d'anacoluthe


Putain, quand je penses que je viens de changer mes lunettes...
C'est pas possible, ça doit pas être la bonne correction... :-(

En tout cas, merci à tous les 2 pour les infos... c'est tout bon, j'ai
quasiment fini ce que je voulais faire...

Je suppose que c'est pas la peine que je publi ce que j'ai fait vu
qu'il y a l'air d'y avoir déjà tout ce qu'il faut sur la FAQ
Outlook... ;-)

A+


Sauf si ca apporte quelque chose de nouveau, suis toujours preneur !!

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Fabrice N.
Le #328773
Bonjour Oliv',

Sauf si ca apporte quelque chose de nouveau, suis toujours preneur !!


Ben en fait, la seul différence, c'est que j'inscris le nom des PJ en
petit, en italique et en gris pour bien différencier du reste.

J'ai aussi fait une petite fonction "MailActif" pour ne pas remettre
toute la partie visant à contrôler si un élément est ouvert et si c'est
un mail pour ne pas tout remettre à chaque fonction...

Quand j'aurais fini, je la post et je vous laisse, toi et JièL, juger
si ça a un intérêt de la rajouter ou pas.

Par contre, dès que je modifie le HTMLBody, j'ai le message d'alerte à
confirme qui apparaît alors que dans la macro que j'ai fait pour
renommer les PJ, je n'avais rien...
J'ai lu dans quelques unes de tes remarques que ça peut-être évité
selon la façon dont est construite la macro...
Il me reste donc à revoir ça et ça devrait être bon...

Fabrice N.
Le #328742
Bonjour Oliv',

Sauf si ca apporte quelque chose de nouveau, suis toujours preneur !!


Bon voilà ce que j'ai fait...
Au cas où ça donne des idées...
Penser à faire attention au retour de ligne auto à supprimer

Par contre, j'ai toujours l'alerte me demandant d'autoriser la manip...
Je sans que dans 2 second Oliv' va me parler de clickyes... ;-)

Je verrais ça plus tard...

*****************************************************
*************** 2 petites fonctions ...
Function TypePJ(ByVal strEntryID As String, attindex As Integer) As Variant
' Ecrit par Olivier CATTEAU
' Nécessite la référence à la librairie Microsoft CDO

' Le retour est <>"" si la PJ est la PJ zest un objet inséré dans le mail HTML

Dim oSession As MAPI.Session
' CDO objects
Dim oMsg As MAPI.Message
Dim oAttachs As MAPI.Attachments
Dim oAttach As MAPI.Attachment

' initialize CDO session
On Error Resume Next
Set oSession = CreateObject("MAPI.Session")
oSession.Logon "", "", False, False

' get the message created earlier
Set oMsg = oSession.GetMessage(strEntryID)
' set properties of the attached graphic that make
' it embedded and give it an ID for use in an <IMG> tag
Set oAttachs = oMsg.Attachments
Set oAttach = oAttachs.Item(attindex)
Dim strCID As String
strCID = oAttach.Fields(&H3712001E)

TypePJ = strCID
Set oMsg = Nothing
oSession.Logoff
Set oSession = Nothing

End Function

Public Function MailActif() As MailItem
' Ecrit par Fabrice NEBBIA avec l'aide de Géo et Olivier CATTEAU

' Renvoie le mail ouvert
' Si aucun élément n'est ouvert ou s'il ne s'agit pas d'un mail
' Un message l'indique et la valeur renvoyée est Nothing

Dim Inspecteur As Inspector

Set MailActif = Nothing

Set Inspecteur = ActiveInspector

' y a t-il un affichage d'item actif
If Inspecteur Is Nothing Then
MsgBox "Aucun élément n'est ouvert actuellement", vbCritical
Exit Function
End If

'Cet affichage concerne-t-il un courrier ?
On Error Resume Next
Set MailActif = Inspecteur.CurrentItem
If Err <> 0 Then
MsgBox "L'élément en cours n'est pas un e-mail", vbCritical
Exit Function
End If
On Error GoTo 0

End Function


*************** Et la procédure à lancer depuis le mail ouvert
Public Sub Suppression_PJ_originales()
' Ecrit par Fabrice NEBBIA
' Grace au travail de Géo, Anacoluthe, Isabelle Prawitz et Olivier CATTEAU

' Fonction à ajouter dans le projet :
' Public Function MailActif() As MailItem

' Supprime les PJ du mail actif et insère le nom des PJ dans le corps du message

Dim Courrier As MailItem
Dim NomsPJ As String

Dim NbPJ As Integer
Dim i As Integer
Dim PJ As Attachment
Dim Separateur As Variant
Dim NbTiret As Integer

Set Courrier = MailActif
If Courrier Is Nothing Then Exit Sub

Select Case Courrier.BodyFormat
Case olFormatHTML:
Separateur = "<BR>"
NbTiret = 45
Case olFormatPlain:
Separateur = Chr(10)
NbTiret = 35
Case Else
Separateur = " - "
NbTiret = 50
End Select

NbPJ = Courrier.Attachments.Count
If NbPJ = 0 Then
MsgBox "Le messages en cours ne contient pas de pièce jointe"
Exit Sub
End If

NomsPJ = IIf(NbPJ = 1, "Pièce jointe", "Pièces jointes") & " du message initial : " & Separateur & String(NbTiret, "-")

For i = NbPJ To 1 Step -1
Set PJ = Courrier.Attachments(i)
PJType = TypePJ(Courrier.EntryID, PJ.Index)
If PJType = "" Then
NomsPJ = NomsPJ & Separateur & "- " & PJ.FileName
PJ.Delete
End If

Next

Select Case Courrier.BodyFormat
Case olFormatHTML:
Courrier.HTMLBody = "<font style='font-family: Arial ;font-size: 8pt ;color:#808080;font-style: italic;'>" & NomsPJ & "</font><BR>" _
& "<font style='font-family: Arial ;font-size: 8pt ;color:#808080;font-style: italic;'>" & String(NbTiret, "-") & "</font><BR><BR>" _
& Courrier.HTMLBody
Case Else
Courrier.Body = NomsPJ & Chr(10) & String(NbTiret, "-") & Chr(10) & Chr(10) & Courrier.Body

End Select


' A activer pour enregistrer automatiquement les modifs
'Courrier.Save


End Sub

*****************************************************

Oliv'
Le #328738
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour Oliv',

Sauf si ca apporte quelque chose de nouveau, suis toujours preneur !!


Bon voilà ce que j'ai fait...
Au cas où ça donne des idées...
Penser à faire attention au retour de ligne auto à supprimer

Par contre, j'ai toujours l'alerte me demandant d'autoriser la
manip...
Je sans que dans 2 second Oliv' va me parler de clickyes... ;-)


non pas du tout je l'utilises jamais

D'ailleurs je n'ai pas d'alerte avec ton code !!!

Sinon ca me plait bien !! le résultat est beaucoup plus beau !

Si on veut être plus carré avec le HTML il faudrait faire

Courrier.HTMLBody = Replace(Courrier.HTMLBody, "<BODY>", "<BODY><font
style='font-family: Arial ;font-size: 8pt ;color:#808080;font-style:
italic;'>" & NomsPJ & "</font><BR>" _
& "<font style='font-family: Arial ;font-size: 8pt
;color:#808080;font-style: italic;'>" & String(NbTiret, "-") &
"</font><BR><BR>")
qu'en penses tu ?


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Fabrice N.
Le #328734
Bonjour Oliv',

D'ailleurs je n'ai pas d'alerte avec ton code !!!


Ah bon ! ? Alors là, je suis surpris... t'as pas une idée de ce qui
peut me manquer ? J'ai pourtant signée la macro...


Sinon ca me plait bien !! le résultat est beaucoup plus beau !


Ravis que ça te plaise ... ;-)

Si on veut être plus carré avec le HTML il faudrait faire

Courrier.HTMLBody = Replace(Courrier.HTMLBody, "<BODY>", "<BODY><font
style='font-family: Arial ;font-size: 8pt ;color:#808080;font-style:
italic;'>" & NomsPJ & "</font><BR>" _
& "<font style='font-family: Arial ;font-size: 8pt
;color:#808080;font-style: italic;'>" & String(NbTiret, "-") &
"</font><BR><BR>")
qu'en penses tu ?


J'en penses que tu es plus malin que moi.
J'y ai pensé à cette histoire de code HTML et j'étais partie dans
l'idée de faire un Instr pour repérer la balise et intercaler mes
lignes à la bonne position.
Ton idée de Replace me plait beaucoup plus... ;-)
Si tu me l'autorise, je rajoute ça sans attendre dans ma macro...


Autre question, est-ce qu'il existe quelque chose qui permette de
rajouter les réferences automatiquement via la macro, histoire de ne
pas l'oublier ?

Publicité
Poster une réponse
Anonyme