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 :

Comment vérifier qu'un mail est bien envoyé - VBA Access


Sujet :

Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Comment vérifier qu'un mail est bien envoyé - VBA Access
    Bonjour

    Pour envoyer des mails automatiquement en utilisant Outlook - VBA, j'ai utilisé la fonction suivante:

    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
    Dim i As Boolean
                Dim olApp   As outlook.Application
                Dim objMail As MailItem
                Set olApp = outlook.Application
                Set objMail = olApp.CreateItem(OlMailItem)
     
                With objMail
                        .BodyFormat = olFormatHTML
                        .To = Destinataire
                        .Subject = Subject
                        .Body = text
                        .Attachments.Add cFile
                        .Cc = listeCC
                        .Send ' Envoie la mail
     
                 End With
              Set objMail = Nothing
    Je veux m'assurer que mon mail est bien envoyé. Il existe pour MailItem la propriété "sent" qui renvoie boolean , mais je n'arrive pas à l'utiliser dans mon code. Avez vous une idée SVP

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour,


    Pourquoi le mail ne serait-il pas envoyé ?

    Si l’adresse est erronée (mauvaise structure) l’Err.Number = -2147467259 est renvoyée.
    On peut donc la traquer dans la procédure d’envoi ou mieux, la prévenir en vérifiant la conformité de la structure de l'adresse lors de l’encodage dans la BDD par exemple comme ceci (copié, je ne sais plus où) :

    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
    Public Function eMailValide(sAdresse As String) As Boolean
    Dim regEx As RegExp, occurrences As MatchCollection
    On Error GoTo GestionErreur
    'Vérifier si Microsoft VBScript Regular Expressions est présente
    Application.References.AddFromGuid "{3F4DACA7-160D-11D2-A8E9-00104B365C9F}", 5, 5
    '
    Set regEx = New RegExp
    regEx.Pattern = "^([\w_.-]+)@([\w]{2,})\.[a-z]{2,3}$"
    regEx.Global = False 'Renvoyer seulement la première occurrence
    Set occurrences = regEx.Execute(sAdresse)
    eMailValide = (occurrences.Count = 1)
    Exit Function
    GestionErreur:
    Select Case Err.Number
      Case 32813  ' la référence existe déjà
        Resume Next
      Case Else
        MsgBox "Erreur dans eMailValide" & vbLf & Err.Number & vbLf & Err.Description
    End Select
    End Function

    Crains-tu d'autres cas ?

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut RAhmed et ClaudeLELOUP,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SendEmail = .Send
    If IsEmpty(SendEmail) Then
    ...
    End If


    @ClaudeLELOUP: cas d'adresse obsolète, serveur occupé...
    par ailleurs le pattern n'est pas très stricte...

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour Vodiem,

    Je suis loin d'être un spécialiste, mais j'utilise souvent... sans problème jusqu'ici. Du moins, je l'espère !

    cas d'adresse obsolète
    Dans ce cas :
    1er temps : le message part
    2e temps : je reçois, après un certain temps, un message "Mail Delivery Subsystem" qui annonce que le destinataire est inconnu, ou que sa boîte est pleine... et je suis informé et si nécessaire, je réagis.

    serveur occupé
    N'est-ce pas alors Outlook qui a le problème ?
    Je suppose que Access va attendre tant que Outlook est bloqué.

    Est-ce correct ?

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    bonsoir ClaudeLELOUP,

    je ne connais pas l'objet outlook.Application pour connaitre les valeurs du .send et les origines qui peuvent lever ces erreurs.
    le cas d'adresse obsolète ne dois pas être un bon exemple car il est fort probable que le send s'arrête effectivement à l'acheminement au serveur de courrier de l'expéditeur.
    mais un acheminement trop long, une interruption dans la liaison, un filtrage d'adresse, de droits... font surement parti de ces cas où le send peut échouer sans pour autant que l'adresse ne soit pas valide.
    dans le cas du cdo un délai trop long suffit à lever une erreur au send.

    je n'ai pas étudié la question plus en détail pour pouvoir te répondre mais ce que je voulais souligner c'est que la validation d'adresse n'est pas suffisante pour garantir l'expédition.
    il ne suffit pas de vérifier qu'une adresse existe pour s'assurer que le courrier y arrive.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonsoir à vous deux,
    et merci bcp pour votre réponse. Pour vodiem, est ce que vous pouvez m'expliquer le code que vs avez mis, et est ce qu'il suffit pour savoir si on mail et partie??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SendEmail = .Send
    If IsEmpty(SendEmail) Then
    ...
    End If


    merci bcp pour votre aide.

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SendEmail = .Send
    If IsEmpty(SendEmail) Then
    ... ' en cas de succès
    End If
    à vérifier car cela marche avec cdo mais la documentation officiel pour MailItem ne précise pas que cet emploi.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Merci Vodiem, c'est clair !

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    Voila j'ai essayé de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SendEmail = .Send
    If IsEmpty(SendEmail) Then
    Mais ce ne marche pas, j 'ai erreur une erreur. comment introduire ce controle dans le code suivant:

    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
    Dim i As Boolean
                Dim olApp   As outlook.Application
                Dim objMail As MailItem
                Set olApp = outlook.Application
                Set objMail = olApp.CreateItem(OlMailItem)
     
                With objMail
                        .BodyFormat = olFormatHTML
                        .To = Destinataire
                        .Subject = Subject
                        .Body = text
                        .Attachments.Add cFile
                        .Cc = listeCC
                        .Send ' Envoie la mail
     
                 End With
              Set objMail = Nothing
    Merci pour votre aide

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Bonjour, dans la même optique je me demande comment peux t'on tester la fonction send de outlook savoir si un mail a été envoyé ou non.
    En effet, suivant si l'utilisateur considère qu'il faut envoyer le mail ou non alors ice dernier est sauvegardé dans un historique ou non si le mail n'est pas envoyé

    Exemple d'utilisation pour la fonction enregistrez-sous sous Excel :

    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
    Sub test_clik()
     
    Application.Dialogs(xlDialogSaveAs).Show
     
    Dim Reponse As Long
    Reponse = Application.Dialogs(xlDialogSaveAs).Show()
     
    If Reponse = 0 Then
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "Pas envoyé"
     
    Else
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "Envoyé"
    End If
     
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/11/2011, 09h13
  2. Réponses: 4
    Dernier message: 27/01/2011, 11h42
  3. Comment vérifier si une application est bien démarrée
    Par emile.coue dans le forum Weblogic
    Réponses: 1
    Dernier message: 28/05/2010, 17h39
  4. Réponses: 0
    Dernier message: 09/05/2009, 16h09

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