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 Outlook Discussion :

Répondre à un mail avec une adresse se trouvant dans le mail


Sujet :

VBA Outlook

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Répondre à un mail avec une adresse se trouvant dans le mail
    Bonjour à tous,

    Je voudrais créer un script qui s'exécute lorsque je reçois des mails de certains expéditeurs. Je voudrais que le script exécute plusieures étapes :
    - recherche l'adresse e-mail à laquelle je dois répondre qui se trouve dans le mail.
    - Mettre en destinataire l'adresse trouvée dans le mail initial
    - Enfin, envoyer la réponse à partir du script.

    Je ne sais vraiment pas comment faire. en cherchant sur des forums, j'ai trouvé deux trois petits indices mais rien de bien concrets.

    Merci pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par dedel Voir le message
    Bonjour à tous,

    Je voudrais créer un script qui s'exécute lorsque je reçois des mails de certains expéditeurs. Je voudrais que le script exécute plusieures étapes :
    - recherche l'adresse e-mail à laquelle je dois répondre qui se trouve dans le mail.
    C'est à dire où dans le corps du mail ? c'est du html ou autre ?
    y a t'il un texte toujours identique précédent l'adresse Email ?

    ex "répondre à : "

    combien d'adresses Email peut il y avoir dans ce mail ?
    Citation Envoyé par dedel Voir le message
    - Mettre en destinataire l'adresse trouvée dans le mail initial
    - Enfin, envoyer la réponse à partir du script.
    la réponse c'est quoi un nouveau mail ? un transfert de celui-ci ,

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    L'adresse à laquelle je veux répondre se trouve dans le corps du texte.
    Le format est du texte brut
    Le mail est toujours est tjourjours composé de la même manière. L'adresse mail se trouve toujours derrière le même texte qui est "mail to : abc@def.fr"
    Dans le message initial, il n'y a qu'une adresse mail.
    La réponse est un nouveau mail qui contiendra une pièce jointe.

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Le plus simple c'est d'utiliser un script sur une règle.

    Voici un exemple qui m'a donné un peu de fil à retordre, le problème étant de savoir quel est le caractère juste après la fin de l'adresse : un " un espace une marque de paragraphe ? Soit tu es sûr de celui-ci , soit il faudrait
    ou tester chaque caractère après l'@ et tant qu'il fait partie des caractères autorisés dans une adresse Email continuer vers la droite
    ou alors trouver le premier caractère non valide comme dans mon exemple (incomplet) :


    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
    Sub recherche_Email_dans_body(LeMail As MailItem) 
     
    Dim MonOutlook As Outlook.Application
    'Dim LeMail As Outlook.MailItem
    'Set LeMail = ActiveInspector.CurrentItem
    OuCommenceAdresse = InStr(1, LeMail.Body, "mail to : ")
            If OuCommenceAdresse > 0 Then
                OuEstArobase = InStr(OuCommenceAdresse + 10, LeMail.Body, "@")
     
                OuEstEspace = InStr(OuEstArobase, LeMail.Body, " ")
                OuEstparagraphe = InStr(OuEstArobase, LeMail.Body, Chr(10))
                OuEstFinParagraphe = InStr(OuEstArobase, LeMail.Body, Chr(13))
                OuEstcote = InStr(OuEstArobase, LeMail.Body, """")
                Fin = ListMin(OuEstEspace, OuEstparagraphe, OuEstFinParagraphe, OuEstcote)
     
                AdresseEmail = Mid(LeMail.Body, OuCommenceAdresse + 10, Fin - OuCommenceAdresse - 10)
            End If
     
     
    Set LeMail = Nothing
    MsgBox "[" & AdresseEmail & "]"
    End Sub
     
    Public Function ListMin(ParamArray ListItems() As Variant)
            Dim I As Integer
     
            For I = 0 To UBound(ListItems())
                If ListMin = "" Then ListMin = ListItems(I)
                If ListItems(I) < ListMin Then ListMin = ListItems(I)
            Next I
    End Function
    ca marche ?
    pour la suite c'est plus simple

    Set l_Msg = MonOutlook.CreateItem(olMailItem)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup
    Je vais essayer tout ca!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je suis confronté à un problème similaire, mais il me semble que les paramètres diffèrent quelque peu...

    En fait, je souhaiterais également :

    - exécuter un script qui trouve l'adresse e-mail à laquelle je dois répondre dans le corps du mail (il n'y en a toujours qu'une seule, elle figure toujours entre parenthèses comme ceci "(xxxxxxx.yyyyyy@zzzzzzz.fr)"et est marquée en HTML par la fonction "mailto:" ;
    - mettre en destinataire cette adresse trouvée dans le mail initial ;
    - enfin, envoyer une réponse ".oft" prédéfinie à partir du script

    Oliv, si je ne me trompe pas, ta proposition ne me convient pas vraiment, puisque dans mon cas j'ai identifié précisément l'adresse email dans le body du mail ? D'ailleurs, j'ai essayé ton script : il fonctionne mais on dirait que pour les adresses utilisant plus de caractères, il ne sélectionne pas tout à gauche et à droite de l'arobase ?

    Aurais-tu une idée de code plus adapté à mon cas ?

    Je pensais mêler un autre script qui m'avait bien aidé et pour lequel tu m'avais déjà apporté tes lumières l'an dernier :

    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
    Sub RepToRec(MyMail As MailItem)
     
    Dim LaReponse As Outlook.MailItem
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim msg As Outlook.MailItem
     
    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set msg = olNS.GetItemFromID(strID)
     
    '' c'est mieux de créer ton nouveau mail en dehors de la boucle
        Set LaReponse = Application.CreateItemFromTemplate("C:\download\LaReponse.oft")
        'on Ajoute des destinataire "A" du mail d'origine
        For Each destinataire In msg.Recipients
        'MsgBox destinataire
        If destinataire.Type = olTo Then
        LaReponse.Recipients.Add destinataire.Address
        End If
     
        Next destinataire
        LaReponse.Send
     
    Set msg = Nothing
    Set olNS = Nothing
    Set LaReponse = Nothing
    End Sub
    Ici, il ne s'agit plus de sélectionner l'adresse du "A" comme destinataire, mais bien l'adresse email qui figure dans le body de mon email.

    Merci d'avance pour votre aide,

    nfranq

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Voici une proposition de code, quelqu'un peut essayer de me guider pour me dire ce qui "coince" (je me doute qu'il y a des erreurs monumentales de cohérence du code, mais je n'y connais absolument rien en VBA) ?

    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
    Sub RecupAdresseEmail(MyMail As MailItem)
     
    Dim LaReponse As Outlook.MailItem
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim msg As Outlook.MailItem
     
    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set msg = olNS.GetItemFromID(strID)
     
    '' c'est mieux de créer ton nouveau mail en dehors de la boucle
        Set LaReponse = Application.CreateItemFromTemplate("C:\download\LaReponse5.oft")
     
        Set MyMail = ActiveInspector.CurrentItem
    AdresseEmail = "mailto:"
     
            DebutEmail = InStr(MyMail.Body, AdresseEmail)
            If DebutEmail > 0 Then
                FinEmail = InStr(DebutEmail, MyMail.Body, """")
                Email = Mid(MyMail.Body, DebutEmail, FinEmail - DebutEmail)
            End If
     
        LaReponse.Recipients.Add Email.Address
     
        LaReponse.Send
     
    Set msg = Nothing
    Set olNS = Nothing
    Set LaReponse = Nothing
    End Sub
    Merci d'avance !

    nfranq

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ca y est, j'ai pu trouver le code qui fonctionne afin de retrouver l'adresse email en question dans le corps de mon mail :

    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
    Sub RechercheEmail(LeMail As MailItem)
     
    Dim MonOutlook As Outlook.Application
    'Dim LeMail As Outlook.MailItem
    'Set LeMail = ActiveInspector.CurrentItem
    AdresseEmail = "mailto:"
     
            DebutEmail = InStr(LeMail.Body, AdresseEmail)
            If DebutEmail > 0 Then
                FinEmail = InStr(DebutEmail, LeMail.Body, """")
                Email = Mid(LeMail.Body, DebutEmail + 7, FinEmail - DebutEmail - 7)
            End If
    Set LeMail = Nothing
    MsgBox "[" & Email & "]"
    End Sub
    Il me reste à présent à utiliser cette adresse email dans le cadre de ma règle automatique et de l'envoi du message ".oft" pré configuré.

    Je suis toujours dans l'attente d'une âme charitable pouvant m'aider à réaliser cette opération.

    Merci d'avance,

    nfranq

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Juste pour dire que je viens de trouver la solution :

    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
    Sub RechercheEmail(MyMail As MailItem)
     
        strID = MyMail.EntryID
        Set olNS = Application.GetNamespace("MAPI")
        Set msg = olNS.GetItemFromID(strID)
     
        AdresseEmail = "mailto:"
        DebutEmail = InStr(msg.Body, AdresseEmail)
        If DebutEmail > 0 Then
            FinEmail = InStr(DebutEmail, msg.Body, """")
            Email = Mid(msg.Body, DebutEmail + 7, FinEmail - DebutEmail - 7)
        End If
     
        Set LaReponse = Application.CreateItemFromTemplate("C:\download\LaReponse.oft")
        LaReponse.To = Email
        LaReponse.Send
     
    End Sub
    Si ça peut servir à quelqu'un...

    Au plaisir,

    nfranq

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    je me retrouve dans le même cas toi.

    Comment executer la macro dans VBA Outlook cette macro?

    Impossible de la lancer

    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
    Sub RechercheEmail(MyMail As MailItem)
     
        strID = MyMail.EntryID
        Set olNS = Application.GetNamespace("MAPI")
        Set msg = olNS.GetItemFromID(strID)
     
        AdresseEmail = "mailto:"
        DebutEmail = InStr(msg.Body, AdresseEmail)
        If DebutEmail > 0 Then
            FinEmail = InStr(DebutEmail, msg.Body, """")
            Email = Mid(msg.Body, DebutEmail + 7, FinEmail - DebutEmail - 7)
        End If
     
        Set LaReponse = Application.CreateItemFromTemplate("C:\download\LaReponse.oft")
        LaReponse.To = Email
        LaReponse.Send
     
    End Sub
    Merci de l'aide.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/06/2015, 12h37
  2. [ASP 3] Envoyer un Mail avec une piece jointe générer
    Par soltani.slim dans le forum ASP
    Réponses: 4
    Dernier message: 15/02/2006, 10h16
  3. [Mail] Envoi de mail avec une boucle posant problème
    Par dj-julio dans le forum Langage
    Réponses: 7
    Dernier message: 09/01/2006, 10h44
  4. [PHPMailer] Les mails avec une adresse extérieure ne partent pas
    Par captaindidi dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 06/01/2006, 19h11
  5. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00

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