Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Outlook > VBA Outlook
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 13h14   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
Par défaut [attachments] comment distinguer les types de pièce jointe

Bonjour,

Je reçois un mail dont le corps est au format Html:
- (1) Des fichiers (".doc", ".jpg",...) sont joints à ce mail.
- (2) Des images sont incorporées dans le corps du mail (par le biais du copier/coller).

Mon but :
- Enregistrer le messages au format html (aucun souci : enregistrement comme page complète avec le dossier associé qui contient les images incorporées (2))
- Enregistrer seulement les fichiers joints (1)

Mon problème :
Quand j'itère sur les "Attachments" du mail, j'obtiens à la fois les fichiers joints et les images incorporées.
Je souhaiterais distinguer les deux types de pièce jointe mais je n'ai pas trouvé, dans la fenêtre des variables locales, la propriété permettant de le faire.
Cela doit exister puisque Outlook présente dans le mail ces éléments de façon distincte.

Merci de m'apporter votre aide .
phansy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 15h58   #2
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
j'ai pris comme hypothèse qu'Outlook numérote (index) les pièces jointes en commençant par les images incorporées.

Dès lors:
- Je compte les occurrences de "<img" dans la valeur de la propriété HTMLBody du mail.
- Lorsque j'itère sur les "attachments", je ne renvoie que ceux dont l'index est supérieur au nombre d'occurences.

J'ai donc quelquechose du style:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim myMail As MailItem
Dim pj As Attachment
Dim nombre_occurence, pos_occurrence As Integer
 
Set myMail = votreObjetMail
 
'Pour compter le nombre d'occurrences de la balise Html "img"
pos_occurrence = 0
Do
    pos_occurence = InStr(pos_occurence  + 1, myMail.HTMLBody, "<img")
    If pos_occurence  = 0 Then Exit Do
    nombre_occurence = nombre_occurence + 1
Loop Until False
 
'Pour renvoyer seulement les fichiers joints (2)
For Each pj in myMail.Attachments
    If pj.Index > nombre_occurence Then
        Debug.Print pj.DisplayName 'pour l'exemple
    End If
End For
Je ne sais pas si cette hypothèse se vérifie chaque fois .
phansy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 18h13   #3
Membre chevronné
 
Avatar de Oliv-
 
Inscription : mars 2006
Messages : 643
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2006
Messages : 643
Points : 699
Points : 699
Salut,
regarde ici la fonction
http://outlook.developpez.com/faq/?p...eceive_Save_PJ
isembedded


attention certaines messageries comme lotus mettent les pj en incorporées
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 14h18   #4
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
Après avoir télécharger le "Collaboration Data Objects, version 1.2.1" sur le site MS.
Puis en copiant ton code cela fonctionne à la perfection.
(je suis sous Outlook 2007).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub PrintEmbedded()
On Error Resume Next
 
Dim oInsp As Outlook.Inspector
Dim oApp  As Outlook.Application
Dim oCurrentMail As Outlook.MailItem
 
Dim oSession As MAPI.Session
Dim oMsg As MAPI.message
Dim oAttachs As MAPI.Attachments
Dim oAttach As MAPI.Attachment
 
Set oApp = CreateObject("Outlook.Application")
Set oInsp  = oApp.ActiveInspector
 
'On s'assure qu'un mail est ouvert    
    If Not TypeName(oInsp) = "Nothing" Then
        If TypeName(oInsp.CurrentItem) = "MailItem" Then
            Set oCurrentMail = oInsp.CurrentItem
            Set oSession = CreateObject("MAPI.Session")
            oSession.Logon "", "", False, False
 
            Set oMsg = oSession.GetMessage(oCurrentMail.EntryID)
            Set oAttachs = oMsg.Attachments
 
            For Each oAttach In oAttachs
                Dim strCID As String
                strCID = oAttach.Fields(&H3712001E)
                Debug.Print strCID
                strCID = ""
            Next
 
        End If
    End If
 
Set oAttachs = Nothing
Set oMsg = Nothing
Set oSession = Nothing
Set oCurrentMail = Nothing
Set oInsp = Nothing
Set oApp = Nothing
 
End Sub
Merci Oliv'
phansy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h45.


 
 
 
 
Partenaires

Hébergement Web