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

Access Discussion :

Récupérer des e-mail pour les mettre dans une table


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut Récupérer des e-mail pour les mettre dans une table
    Bonjour à tous

    J'ai besoin de récupérer des e-mail et les mettre dans une table pour ensuite traiter les données reçues.
    Les mettre dans une table et traiter les donnée reçues ne me pose aucun problème.
    Par contre, alors que je pensait qu'il ne serait pas bien dur de récupérer les e-mail, je n'arrive pas à trouver comment faire.

    J'ai bien trouvé ça :
    https://drq.developpez.com/vb/tutoriels/Winsock/
    Mais je n'arrive même pas à ajouter à mon projet le composant Microsoft Winsock Control, je ne sais pas comment faire avec la dernière interface de Access.
    Donc je ne sais même pas si j'arriverais à exploiter ce code.

    Quelqu'un peut-il m'aider à trouver une solution pour que je puisse récupérer mes e-mail ?

    Merci par avance

    Velcor

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 589
    Points : 1 083
    Points
    1 083
    Par défaut
    Bonjour,

    Composant obsolète à ne plus utiliser.

    Je serais toi je regarderais plutôt du coté du pilotage d'Outlook par automation pour récupérer les informations.

    ONTAYG

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Oui, c'est bien ce qu'il me semble

    J'ai bien l'impression que la meilleure solution est de passer par Outlook

    Mais je n'arrive pas à trouver comment.

    Tous les codes que je trouve font des trucs un peu particulier, genre "obtenir les PJ" ou des trucs comme ça.
    Il n'y a pas les tous simple "Lire les e-mails dans la boite par défaut"
    Et je n'arrive pas à adapter les codes que je trouve.

    Un peu d'aide serait la bien venue

    Je cherche un routine qui fasse quelque chose du genre :

    - Lire le premier e-mail (tous simple, sans pj)
    - Obtenir son contenu tel que titre, emetteur, corps principal, etc, dans des variables
    - Supprimer l'e-mail lu
    - Recommencer tant qu'il en reste.

    Ca me paraissait quelque chose de pas compliqué, mais en fait mon niveau est trop faible pour ce genre de création de code

    Et ça me bloque pour tout un tas de tâches (que je maitrise, c'est des traitements simple) très importantes.

    Donc si quelqu'un a un lien ou une piste un peu plus consistante, je suis preneur.

    Merci par avance

    Robin

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonsoir,
    le plus simple ne serait-ce pas d'attacher le dossier "Boîte de réception" et de s'en servir comme d'une table ?

    Nom : _0.JPG
Affichages : 125
Taille : 53,1 Ko

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    en effet, c'est une très bonne solution !
    Ca marche nickel !

    Le seul petit défaut c'est qu'il faut attacher la table manuellement. Et c'est un programme qui sera utilisé sur plusieurs postes.
    Ca ne vaut donc pas un code écrit qui ne nécessiterait pas de manipulation particulière à l'installation.

    Mais c'est tellement peu pour le service rendu !

    Merci bien !

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    ça m'étonnerais qu'on ne puisse pas le faire en VBA. Il y a beaucoup de littérature sur ce sujet.

    Cordialement,

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Retour sur mon problème.
    Finalement la solution proposée pose un problème :
    Je n'arrive pas à supprimer les e-mails, ils reviennent en permanence.
    Ce qui pose problème, les e-mail lu doivent disparaitre apres leur lecture...
    Je suis en IMAP, peut-être qu'en POP3 ?
    Mais ça ne m'arrenge pas non plus.
    Une idée pour ce phénomène étrange ?

    Voilà la fonction que j'ai écrite :


    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
    Public Function ReadLastMail(Titre, Corps As String) As Boolean
        ' lit le premier e-mail disponible, renvoie le titre et le corps, puis efface l'e-mail de la boite mail
     
        Titre = ""
        Corps = ""
        ReadLastMail = False
     
        Dim cnc As New ADODB.Connection
        Dim DL As New ADODB.Recordset
        Set cnc = CurrentProject.Connection
        DL.Open "Boite_Reception", cnc, adOpenKeyset, adLockOptimistic
     
        If Not DL.EOF Then
            Corps = DL![Table des matières]
            Titre = DL![Objet]
            DL.Delete                                    <------ Le delete enlève l'email de outlook, mais pas sur le serveur. Du coup l'e-mail revient à la première consultation ...
            ReadLastMail = True
        End If
     
        DL.Close
        cnc.Close
     
    End Function

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonsoir,
    dans ce cas, essaie ce code qui utilise directement la boite de réception Outlook, il traite les messages non lus et ensuite les marque comme lus:
    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
    Sub lireMAils()
    Dim oApp As Object
    Dim oFolder As Object
    Dim oMailItem As Object
    Dim MAPISpace As Variant
    Set oApp = CreateObject("Outlook.application")
     
    Set MAPISpace = oApp.GetNamespace("MAPI")
    Set oFolder = MAPISpace.GetDefaultFolder(olFolderInbox)
     
    For Each oMailItem In oFolder.Items
        ' traiter les message non lus
        If oMailItem.UnRead Then
         '  pour tester : MsgBox "Subject: " & oMailItem.Subject & vbCrLf & "Body: " & oMailItem.Body
     
         ' ========>>>>>>>> ici ton code de traitement <<<<<<<===============
         ' marquer comme lu ' ATTENTION: cela met à jour le "marqué comme lu" du message dans Outlook
            oMailItem.UnRead = False
        End If
    Next oMailItem
     
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    C'est bon, çà marche !
    (avec le lien vers la table de la boite e-mail)
    En fait il faut attendre plusieurs minutes avant que l'e-mail ne disparaisse du serveur !
    J'étais un peu trop impatient dans mes essais...
    J'y arrive avec les adresse .gmail

    La méthode ultime serait de se connecter en POP avec le réglage "effacement du message à la première lecture"
    Comme ça, rien à faire pour l'effacer et ce serait instantané
    Mais je n'arrive pas à régler Outlook pour qu'il lise la messagerie Gmail en POP


    Avec .Yahoo, .outllook, j'ai des problème soit de connexion, soit d'autorisation de message...
    Du coup, ça ne marche pas du tout

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonjour,
    La méthode ultime serait de se connecter en POP avec le réglage "effacement du message à la première lecture"
    Comme ça, rien à faire pour l'effacer et ce serait instantané
    avec mon dernier code, tu peux supprimer un message non-lu et en plus, plus besoin d'attacher la boite de réception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each oMailItem In oFolder.Items
        ' traiter les message non lus
        If oMailItem.UnRead Then
     
         ' ========>>>>>>>> ici ton code de traitement <<<<<<<===============
     
            ' suppression du message traité
            oMailItem.Delete
        End If
    Next oMailItem
    j'ai fait le test avec ma messagerie Gmail sur Outlolok
    Avec .Yahoo, .outllook, j'ai des problème soit de connexion, soit d'autorisation de message...
    Du coup, ça ne marche pas du tout
    c'est un problème, embêtant mais nécessaire, avec la sécurité renforcée

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    OK
    Mais en fait ça ne marche pas car cette méthode ne lit que les message arrivées dans "Fichier de données Outlook"
    Hors la boite e-mail que j'utilise (il y en a plusieurs) n'apparait pas dans ce dossier.
    Il faudrait pouvoir lire les messages en choisissant la boite e-mail
    Mettre un filtre sur l'adresse de destination ne marche pas non plus, car je n'ai pas accès aux e-mail qui m'intéressent, ils ne sont pas dans le dossier accessible ...

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    j'ai trouvé quelques discussions qui traitent de la manière de parcourir les dossiers Outlook, tu y trouveras peut-être ton bonheur:
    https://www.developpez.net/forums/d1...older-outlook/
    https://www.developpez.net/forums/d1...toire-outlook/
    https://www.developpez.net/forums/d1...icher-dossier/
    si tu en veux plus, tape le mot-clé MAPIFolder dans "Recherche dans ce forum"

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Ca y est, ça marche complètement
    C'était instable avec la méthode consistant à lier les tables : des longueurs, des blocages ...

    Finalement j'ai écris le code suivant :
    Il lit le premier e-mail disponible, renvoie le Titre et le Corps, puis efface le message
    Est faux s'il n'y a pas de message dispo
    On peut boucler dessus autant de fois qu'on veut jusqu'à ce qu'il n'y ai plus d'e-mail (à force de les effacer, il fini par ne plus y en avoir, c'est ce que je fais)
    Si vous voulez reprendre ce code, il faut remplacer "Mon adresse e-mail" par l'adresse e-mail dans laquelle vous voulez lire les messages.


    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
    Public Function ReadLastMail(Titre, Corps As String) As Boolean
     
         ' Initialisation des variables
        Titre = ""
        Corps = ""
        ReadLasMail = False
     
        Dim olApp As Object      ' Application Outlook
        Dim olNS As Object       ' Espace de noms Outlook
        Dim olFolder As Object  ' Dossier de la boite e-mail
        Dim olMail As Object     ' Message électronique
     
        On Error Resume Next
     
        ' Créer une instance de l'application Outlook
        Set olApp = CreateObject("Outlook.Application")
     
        ' Vérifier si Outlook est en cours d'exécution
        If olApp Is Nothing Then Exit Function
     
        ' Obtenir l'espace de noms MAPI
        Set olNS = olApp.GetNamespace("MAPI")
     
        ' Sélectionner le dossier de la boîte de réception
        Set olFolder = olNS.Folders("Mon adresse e-mail").Folders("Boîte de réception")
     
        ' Vérifier si le dossier n'est pas vide
        If olFolder.Items.Count = 0 Then Exit Function
     
         ' Récupérer le premier message de la liste
        Set olMail = olFolder.Items(1)
     
         ' Lire le titre et le corps
        Titre = olMail.Subject
        Corps = olMail.Body
     
         ' Effacer l'e-mail   
        olMail.Delete
     
        ' Libérer les objets
        Set olMail = Nothing
        Set olFolder = Nothing
        Set olNS = Nothing
        Set olApp = Nothing
     
         ' Valider la bonne réception d'un e-mail
        ReadLastMail = True
     
    End Function

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonjour,
    Citation Envoyé par Velcor
    (désolé pour la présentation, je ne sais pas mettre le code dans une "boite de listing" ... Mais il n'y a pas d'indentation, c'est très lisible )
    pour "baliser" le code c'est cette icône :# au bout de la deuxième ligne

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,
    pour "baliser" le code c'est cette icône :# au bout de la deuxième ligne
    FAIT !

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Après plusieurs jours d'utilisation, ce code marche nickel
    J'ai donc très exactement ce que je cherchais.
    Merci à vous tous, je met le sujet en "Résolu"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/07/2017, 08h08
  2. [MySQL] récupérer des données formulaires pour les insérer dans une BD
    Par Hamzaviola dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/05/2016, 13h06
  3. Recuperer le nom des onglets pour les mettre dans une colonne
    Par nico4566 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2011, 17h23
  4. [MySQL] Recupérer plusieurs $POST pour les mettre dans une table
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2010, 20h56
  5. Réponses: 5
    Dernier message: 21/02/2007, 16h12

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