IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Récupérer les pièces jointes des emails d'outlook


Sujet :

VBA Access

  1. #1
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut Récupérer les pièces jointes des emails d'outlook
    Bonsoir,

    J'ai un code VBA qui me permet de récupérer les emails d'outlook dans une table et tout marche bien
    Mais je ne sais pas récupérer les noms des pièces jointes des emails.
    Je m'explique, je souhaite avoir les noms et le chemin vers les pièces jointes pour pouvoir les ouvrir...
    Si quelqu'un connait les noms des champs de la bibliothèque outlook...
    J'ai cherché sur le web sans résultat...

    Merci pour votre aide !
    VrroOOOAAAAAPPPPPPPPPP !!!

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Si tu références un email à l'aide d'une variable objet Outlook.MailItem tu accèdes à la collection Attachments.
    Chaque élément de cette collection a les propriétés FileName, PathName et DisplayName.
    Il y a aussi une méthode SaveAsFile permettant d'enregistrer une pièce jointe.

    Ne sachant pas s'il existe une méthode pour ouvrir une pièce jointe, je la sauverai dans un dossier temporaire, puis je l'ouvrirai avec ShellExecute.

    A+

  3. #3
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Yeppiii !!
    Une réponse à ma question, merci !!!

    Voici le code que j'ai trouvé sur le net et que j'ai modifié pour qu'il tourne sans problème...
    Cela me permet de récupérer tous les emails de la boite de reception dans une table, mais je ne vois pas comment rajouter le code en plus pour gérer les pièces jointes...
    J'ai vu en faisant un lien avec outlook qu'il y a un champ oui/non dans l'email qui dit si il y a des pièces jointes ou non mais je n'arrive pas à le retrouver dans la classe, le code si dessous essaye de récupérer dans la table le champ Attachments.Read mais il est vide
    A mon avis il faut tester le nombre et les inscrire dans une table à part avec un lien vers la table des emails pour gérer plusieurs pièces en même temps mais je ne sais par où commencer...
    Si tu as une idée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Sub recupere_les_messages_outlook_dans_une_table()
    'gestion des erreurs
    ' pour tester tout le code mettre : On Error GoTo gere à la place de ce qui suit...
    On Error Resume Next
     
    'déclaration des variables de travail
    Dim olkapp As Object
    Dim olknamespace As Object
    Dim objOLfolder As Outlook.MAPIFolder
    Dim i As Integer
    Dim marequete As String
    'ouverture de l'object outlook
    Set olkapp = CreateObject("Outlook.application")
    Set olknamespace = olkapp.GetNamespace("MAPI")
     
    'ouverture des dossiers de mails
    Set objOLfolder = olknamespace.GetDefaultFolder(olFolderInbox)
     
    'informations sur le nombre de mails trouvés
    MsgBox ("Access a trouvé : " & objOLfolder.Items.Count & " mail(s) dans votre boite de réception !")
     
    'aucun mail n'a été trouvé ? => on sort !
    If objOLfolder.Items.Count = 0 Then
    Exit Sub
    End If
     
    'on désactive les avertissements
    DoCmd.SetWarnings False
     
    'passage en revue des mails et écriture dans la table
    'des champs suivants SUJET,DESTINATAIRE,DATE ENVOI,DATE RECU
     
    Dim nouvsujet As String
    Dim nouvto As String
    Dim nouvMessage As String
    Dim nouvAttachments  As String
    Dim find As String
    Dim repl As String
     
    find = Chr(34)
    repl = "'"
     
    For i = objOLfolder.Items.Count To 1 Step -1
    nouvsujet = Replace(Replace(objOLfolder.Items(i).Subject, find, repl), "'", " ")
    nouvto = Replace(Replace(objOLfolder.Items(i).SenderEmailAddress, find, repl), "'", " ")
    nouvMessage = Replace(Replace(objOLfolder.Items(i).Body, find, repl), "'", " ")
    nouvAttachments = Replace(Replace(objOLfolder.Items(i).Attachments.Read, find, repl), "'", "''")
    marequete = "INSERT INTO T_mails (SUJET,TO,ENVOYELE,RECULE,MESSAGE,Attachments) VALUES ('" _
    & IIf(Not IsNull(nouvsujet), nouvsujet, "") & "'" _
    & ",'" & IIf(Not IsNull(nouvto), nouvto, "") & "'" _
    & ",'" & IIf(Not IsNull(objOLfolder.Items(i).SentOn), objOLfolder.Items(i).SentOn, "") & "'" _
    & ",'" & IIf(Not IsNull(objOLfolder.Items(i).ReceivedTime), objOLfolder.Items(i).ReceivedTime, "") & "'" _
    & ",'" & IIf(Not IsNull(nouvMessage), nouvMessage, "") & "'" _
    & ",'" & IIf(Not IsNull(nouvAttachments), nouvAttachments, "") & "'" _
    & ");"
     
    'Insertion dans la table
    DoCmd.RunSQL marequete
     
    'on réactive les avertissements
    DoCmd.SetWarnings True
     
    'fermeture des objets
    'et libération
    olkapp.Quit
    Set olkapp = Nothing
     
    'fermeture normale
    Exit Sub
     
    'en cas d'erreur
    gere:
    MsgBox ("L'erreur suivante a eu lieue : " & vbCrLf & Err.Description)
    Exit Sub
     
    End Sub
    VrroOOOAAAAAPPPPPPPPPP !!!

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    j'ai ajouté une variable objet mailItm de type Outlook.MailItem pour faciliter l'écriture et la lisibilié du code.

    mailItm.Attachments.Count donne le nombre de pièces jointes.
    mailItm.Attachments(indice).DisplayName est le texte affiché dans l'email pour la lpièce jointe.
    mailItm.Attachments(indice).FileName est le nom de fichier de la pièce jointe.

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Sub recupere_les_messages_outlook_dans_une_table()
    'gestion des erreurs
    ' pour tester tout le code mettre : On Error GoTo gere à la place de ce qui suit...
    'On Error Resume Next
     
    'déclaration des variables de travail
    Dim olkapp As Outlook.Application
    Dim olknamespace As Outlook.NameSpace
    Dim objOLfolder As Outlook.MAPIFolder
    Dim mailItm As Outlook.MailItem
    Dim i As Integer, pj As Integer
    Dim marequete As String
    'ouverture de l'object outlook
    Set olkapp = CreateObject("Outlook.application")
    Set olknamespace = olkapp.GetNamespace("MAPI")
     
    'ouverture des dossiers de mails
    Set objOLfolder = olknamespace.GetDefaultFolder(olFolderInbox)
     
    'informations sur le nombre de mails trouvés
    MsgBox ("Access a trouvé : " & objOLfolder.Items.Count & " mail(s) dans votre boite de réception !")
     
    'aucun mail n'a été trouvé ? => on sort !
    If objOLfolder.Items.Count = 0 Then GoTo Sortie
     
    'passage en revue des mails et écriture dans la table
    'des champs suivants SUJET,DESTINATAIRE,DATE ENVOI,DATE RECU
     
    Dim nouvsujet As String
    Dim nouvto As String
    Dim nouvMessage As String
    Dim nouvAttachments  As String
    Dim find As String
    Dim repl As String
     
    find = Chr(34)
    repl = "'"
     
    For i = objOLfolder.Items.Count To 1 Step -1
        If objOLfolder.Items(i).Class <> olMail Then GoTo MsgSuivant
     
        Set mailItm = objOLfolder.Items(i)
        nouvsujet = Replace(Replace(mailItm.Subject, find, repl), "'", " ")
        nouvto = Replace(Replace(mailItm.SenderName, find, repl), "'", " ")
        nouvMessage = Replace(Replace(mailItm.Body, find, repl), "'", " ")
     
        For pj = 1 To mailItm.Attachments.Count
            Debug.Print mailItm.Attachments(pj).DisplayName & ":" & mailItm.Attachments(pj).FileName
        Next
     
        nouvAttachments = Replace(Replace(mailItm.Attachments.Count, find, repl), "'", "''")
     
        marequete = "INSERT INTO T_mails (SUJET,TO,ENVOYELE,RECULE,MESSAGE,Attachments) VALUES ('" _
        & IIf(Not IsNull(nouvsujet), nouvsujet, "") & "'" _
        & ",'" & IIf(Not IsNull(nouvto), nouvto, "") & "'" _
        & ",'" & IIf(Not IsNull(objOLfolder.Items(i).SentOn), objOLfolder.Items(i).SentOn, "") & "'" _
        & ",'" & IIf(Not IsNull(objOLfolder.Items(i).ReceivedTime), objOLfolder.Items(i).ReceivedTime, "") & "'" _
        & ",'" & IIf(Not IsNull(nouvMessage), nouvMessage, "") & "'" _
        & ",'" & IIf(Not IsNull(nouvAttachments), nouvAttachments, "") & "'" _
        & ");"
     
        'on désactive les avertissements
        DoCmd.SetWarnings False
     
        'Insertion dans la table
        DoCmd.RunSQL marequete
     
        'on réactive les avertissements
        DoCmd.SetWarnings True
    MsgSuivant:
    Next
     
    'fermeture des objets
    'et libération
    Sortie:
    Set mailItm = Nothing
    Set objOLfolder = Nothing
    Set olknamespace = Nothing
    olkapp.Quit
    Set olkapp = Nothing
     
    'fermeture normale
    Exit Sub
     
    'en cas d'erreur
    gere:
    MsgBox ("L'erreur suivante a eu lieue : " & vbCrLf & Err.Description)
    GoTo Sortie
     
    End Sub
    Que comptes tu faire avec les pièces jointes ?
    Tu veux les stocker dans une table ou dans un dossier ?
    Parce que si tu veux les stocker dans une table tu ne pourra pas le faire avec une requête INSERT.

    A mon avis il faut tester le nombre et les inscrire dans une table à part avec un lien vers la table des emails pour gérer plusieurs pièces en même temps mais je ne sais par où commencer...
    Une table pour les emails (tu l'as déjà) avec un identifiant unique (NuméroAuto par exemple).
    Une table pour les pièces jointes, où tu ajoutes le nom des pièces jointes avec l'identifiant de l'email.

    A+

  5. #5
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Super !!!

    Que comptes tu faire avec les pièces jointes ?
    En fait c'est une application pour un groupe de cabinets d'experts comptables qui ont réel problème, le fait de classer et gérer les emails qui sont des pièces tout aussi "officielles" qu'un courrier et qu'il faut conserver pendant des années et pouvoir rouvrir en cas de litige...
    J'ai déjà une "grosse" appli qui gère la gestion des temps, facturation, charge de travail des collaborateurs, tableaux de bords, liquidation…
    Le but de cette nouvelle extension est de pouvoir voir tous les emails d'un client et d'un simple clic rouvrir les pièces jointes.
    L'appli crée un dossier principal par client classé dans des dossiers alpha :
    Exemple A / Albert, puis des sous dossiers par clients, un dossier emails sera mis en place pour recevoir les pièces jointes…
    Les emails non associés à des fiches clients entrent dans un compte "a classer" et une secrétaire les traitera chaque jour...
    Donc cette nouvelle extension doit copier les emails dans une table et les pièces jointes dans le dossier du client et le lien vers les pièces dans une table effectivement rattachée par l'id à la table des emails…
    Il reste un gros bémol à tout cela c'est le fait que dans les cabinets les emails sont gérés par Exchange et non Outlook, mais je me dis qu'une fois la chose vue avec Outlook il me sera plus facile de la mettre en place avec Exchange…

    Merci pour ton aide, je crois que maintenant je vais pouvoir tout mettre en place, as tu une idée sinon si pour Exchange tout change beaucoup...

    Denis
    VrroOOOAAAAAPPPPPPPPPP !!!

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Non, je n'ai jamais programmé côté Exchange.
    Au boulot les serveurs Exchange sont gérés par le service informatique.
    Nous utilisons Outlook comme client de messagerie Exchange.

    A+

  7. #7
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Je sais qu'Exchange gère comme une "image" des emails pour une station avec Outlook, je vais aller faire es tests cette semaine, en cas je viendrai en parler ici...
    VrroOOOAAAAAPPPPPPPPPP !!!

Discussions similaires

  1. [ZF 1.11] Récupèrer les pièces jointe avec Zend_Mail_Storage_Imap
    Par amalec78 dans le forum Zend Framework
    Réponses: 1
    Dernier message: 20/07/2011, 09h28
  2. [Indy] Comment récupérer les pièces jointes d'un mail ?
    Par dj_lil dans le forum Web & réseau
    Réponses: 6
    Dernier message: 01/04/2011, 19h07
  3. Réponses: 2
    Dernier message: 20/10/2010, 13h09
  4. Récupérer les pièces jointes de Lotus Notes
    Par kazami0083 dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 26/08/2009, 16h19
  5. récupérer les pièces jointes d'un mail [Outlook Express]
    Par chrisledeveloppeur2 dans le forum Delphi
    Réponses: 2
    Dernier message: 10/01/2007, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo