Envoie d'email avec VB

Résolu
Je souhaiterais pouvoir envoyer un email automatique à partir d'une application VB. La seule solution que j'ai trouvée est d'utiliser MAPI. Seulement je n'arrive pas à m'en servir... Deplus je ne trouve aucun endroit ou l'on spécifie l'adresse du serveur pop3!!!
Est-ce que dueldu'un peut me detailler la procédure à suivre ou mieux encore m'indiquer une autre solution que MAPI.
Merci d'avance

34 réponses

Résumé de la discussion

Un envoi automatique d’e-mails à partir d’une application VB est envisagé et MAPI est proposé comme solution, mais la procédure reste difficile et l’emplacement de l’adresse du serveur POP3 demeure peu évident. Plusieurs réponses proposent des solutions pratiques, notamment des exemples VB6 utilisant Outlook Express ou CDOSYS pour envoyer par SMTP, en configurant dans le code le serveur SMTP et l’adresse d’envoi. D'autres propositions expliquent l’usage de MAPI via Outlook ou Outlook Express avec des objets COM, et certains fournissent des extraits pour l’envoi et la gestion des pièces jointes. En parallèle, certains échanges évoquent des solutions externes comme l’envoi via HTTP ou PHP, et plusieurs participants demandent ou partagent des extraits de code source pour accélérer l’implémentation.

Bobot (l’IA à votre service)
  1. Bonjour,

    Exemple type sous VB6 :

    Cet exemple utilise Outlook Express même si celui-ci n'est pas congiguré.
    La configuration est effectué dans le code !

    Les valeurs suivantes doivent être remplacer par des valeurs valides.

    [ smtp.serveur.net ]
    [ monadresse@monserveur.net ]
    [ destinataire@serveur.net ]

    Option Explicit
    '
    'Déclaration de constantes
    
    Const PourLecture = 1
    Const cteAdresseSource = "monadresse@monserveur.net"
    
    
    Private Sub cmd_Click(Index As Integer)
    
        If (Index > 0) Then
           
            ' Déclaration de variables
            Dim objMail As Object
            Dim sDestination As String
            Dim sPieceJointe As String
            Dim msgTitre As String
            Dim msgTexte As String
            
            Dim Drapeau As Boolean
        
            Set objMail = CreateObject("CDO.Message")
            Drapeau = False
            sDestination = "destinataire@serveur.net"
            msgTitre = "Automatisme"
            msgTexte = "Bonjour," & vbLf & "Corps du message"
            sPieceJointe = "D:\Monfichier.txt"
            Drapeau = True
        
            With objMail
        
                ' Ligne à modifier selon l'adresse de l'envoyeur
                .From = cteAdresseSource
                .To = sDestination
                .Subject = msgTitre
                ' Ligne à modifier selon le texte voulu !
                If (sPieceJointe <> "") Then
                    If (Drapeau = True) Then
                        .TextBody = msgTexte & vbLf & LirePieceJointe(sPieceJointe) & vbLf
                    Else
                        .TextBody = msgTexte & vbLf & "Pièce jointe incluse : " & vbLf
                    End If
                Else
                    .TextBody = msgTexte & vbCrLf & "Aucune Pièce jointe" & vbCrLf
                End If
                ' Ligne à modifier selon l'adresse du serveur SMTP
                .Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.serveur.net"
                .Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                .Configuration.Fields.Update
        
                If ((sPieceJointe <> "") And (Drapeau = False)) Then
                    objMail.AddAttachment (sPieceJointe)
                End If
        
                .Send
            End With
        
            Set objMail = Nothing
        
            MsgBox "Courriel envoyé !"
        Else
            Unload Me
        End If
    
    End Sub
    '
    
    Function LirePieceJointe(LeFichier)
    
        Dim objFSO, CeFichier
    
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        If (objFSO.FileExists(LeFichier)) Then
            Set CeFichier = objFSO.OpenTextFile(LeFichier, PourLecture)
            LirePieceJointe = CeFichier.ReadAll
            CeFichier.Close
            Set CeFichier = Nothing
        End If
        Set objFSO = Nothing
    
    End Function
    '
    


    Lupin
    15
    1. bonjour Lupin je suis désolé de te demander sa mais pourrais tu metre plus de remarque dans ton code car je suis pas un pro en VB donc je ne comprend pas toute les lignes...je ne pence pas etre le seul...merci d'avance
      0
    2. @jo456re :

      Voilà, j'ai tenté de rajouter des commentaires sur chaque instruction

      Option Explicit
      '
      
      'Déclaration de constantes
      Const PourLecture = 1
      Const cteAdresseSource = "monadresse@monserveur.net"
      
      
      Private Sub cmd_Click(Index As Integer)
      ' Ici le paramètre signifie que le bouton
      ' fait partie d'un groupe et l'Index est le no
      ' du bouton
      
          If (Index > 0) Then
             
              ' Déclaration de variables
              ' Objet courriel
              Dim objMail As Object
              ' Adresse de destination
              Dim sDestination As String
              ' Nom du fichier en pièce jointe
              Dim sPieceJointe As String
              ' Variable contenant l'objet du courriel
              Dim msgTitre As String
              ' Variable contenant le corps du message
              Dim msgTexte As String
              
              ' Variable boolèen pour savoir si
              ' on doit incluse le texte du fichier
              ' texte dans le corps du message ou
              ' si on doit inclure le fichier en
              ' pièce jointe
              Dim Drapeau As Boolean
          
              ' Instancié un objet "courriel"
              Set objMail = CreateObject("CDO.Message")
              ' Initialisation de la variable
              Drapeau = False
              ' Affectation de l'adresse courriel du destinataire
              sDestination = "destinataire@serveur.net"
              ' Affectation du titre
              msgTitre = "Automatisme"
              ' Affectation du corps di message
              msgTexte = "Bonjour," & vbLf & "Corps du message"
              ' Affectation du nom du fichier incluant sa localisation
              sPieceJointe = "D:\Monfichier.txt"
              ' D'où pièce jointe existe -> Drapeau = Vrai
              Drapeau = True
          
              ' Avec objet courriel
              With objMail
          
                  ' Ligne à modifier selon l'adresse de l'envoyeur
                  ' Affectation à la propriété [ .From ] de l'adresse
                  ' de l'envoyeur
                  .From = cteAdresseSource
                  ' Idem pour le destinataire
                  .To = sDestination
                  ' Affectation du titre ( objet du message )
                  .Subject = msgTitre
                  ' Ligne à modifier selon le texte voulu !
                  ' Si pièce jointe existe
                  If (sPieceJointe <> "") Then
                      ' Si le texte de la pièce jointe doit
                      ' être inclus dans le corps - Utilisation de la
                      ' fonction [ LirePieceJointe ] qui retourne le
                      ' contenu du fichier texte
                      If (Drapeau = True) Then
                          .TextBody = msgTexte & vbLf & LirePieceJointe(sPieceJointe) & vbLf
                      Else
                          ' Sinon spécifié qu'il est inclu en pièce jointe
                          ' dans le corps du message
                          .TextBody = msgTexte & vbLf & "Pièce jointe incluse : " & vbLf
                      End If
                  Else
                      ' Sinon spécifié dans le corps qu'il n'y a pas de pièce jointe
                      .TextBody = msgTexte & vbCrLf & "Aucune Pièce jointe" & vbCrLf
                  End If
                  ' Ligne à modifier selon l'adresse du serveur SMTP
                  ' Ici "smtp.serveur.net" doit correspondre à votre FAI
                  ' exemple : [ smtp.free.fr ]
                  .Configuration.Fields _
      ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.serveur.net"
                  ' Aucune modification à cette ligne
                  .Configuration.Fields _
      ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      
                  ' Aucune modification à cette ligne
                  .Configuration.Fields.Update
          
                  ' Si on veut inclure le fichier en pièce jointe
                  If ((sPieceJointe <> "") And (Drapeau = False)) Then
                      objMail.AddAttachment (sPieceJointe)
                  End If
                  ' Envoyer le message
                  .Send
              End With
          
              ' Libération de l'objet instancié
              Set objMail = Nothing
          
              MsgBox "Courriel envoyé !"
          Else
              ' Fermeture de la forme pour envoi de courriel
              Unload Me
          End If
      
      End Sub
      '
      
      '  Ici la fonction n'étant pas typé, elle est de type Variant
      ' et peut retourner a peu près n'importe quoi.
      Function LirePieceJointe(LeFichier)
      
          Dim objFSO, CeFichier
      
          ' Instancié un objet du système de fichier
          Set objFSO = CreateObject("Scripting.FileSystemObject")
          ' Si le fichier existe
          If (objFSO.FileExists(LeFichier)) Then
              ' Instancié un poignée sur le fichier pour l'ouvrir ( une main sur )
              Set CeFichier = objFSO.OpenTextFile(LeFichier, PourLecture)
              ' Lire tout le contenu du fichier
              LirePieceJointe = CeFichier.ReadAll
              ' Fermer le fichier
              CeFichier.Close
              ' Libérré l'objet du fichier
              Set CeFichier = Nothing
          End If
          
          ' Libérré l'objet du système de fichier
          Set objFSO = Nothing
      
      End Function
      '
      


      Lupin
      0
    3. @Utilisateur anonymeAllo, super ce script Lupin,

      ca vfonctionne à merveille en local ici. Toutefois, peux-tu ou quelququ'un pourrait-il m'en dis d'avantage sur le schema que nous appelons :

      .Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "relais.videotron.ca"
      .Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      .Configuration.Fields.Update

      à quoi ca sert exactement. J'envois de mon ordi ici , via mon smtp de mon FAI videotron.

      à quoi ca sert la ligne 1, et la ligne duex, avec cette option 2? Mes envois seront ils inspecté, classés, bref l'appel de ce schéma sera-t-il inventorié chez microsoft?

      Une quesiton bête faut le dire, mais j'aimerais en être certain.

      merci à l'avance.
      0
    4. @Sébastien Julienre:

      Je me suis trompé ai j'ai envoyé ma réponse en fin de fil :-(

      Quoi qu'il en soit, tu trouveras la réponse en fin de fil !

      C'est à l'origine un script VBS qui permet de signaler des évènements
      ou de rafraichir un journal automatique :-)

      Je l'ai fabriqué pour m'envoyer mon @IP par courriel, puisque comme
      toi, je n'ai pas une @IP fixe !

      Mon frére et ma mère sont chez vidéotron et il ont ou avait ( il y a quand même
      2 ans que je suis descendu à Sherbrooke) une ip fixe.

      @+
      Lupin
      0
    5. @Utilisateur anonymebonjour ,

      je voudrais savoir si tu pourrais me dire comment faire pour envoyer des mil avec VB 2008 et les recevoir ( il faudrait qu'il s'affiche dans une listBox et pour les ecrirent il faudrait pouvoir les ecrirent dans une textBox

      merci d'avance
      0
  2. J'ai un petit prog qui permet d'envoyer les mail que g dévellopez sous vb5.
    Laisse ton E mail et je t'envois les sources sans probleme.
    Je ne fais que d'envoyer des mail et je ne m'occupê absolument pas du pop3 qui permet de recuperer les mails pour la lecture.
    3
    1. je souhaite avec le code source d'envoie de mail par vb.
      merci
      0
    2. j'attend votre mail contenant le code source
      spidermail@wanadoo.fr
      0
    3. Salut,
      Je serais aussi interessé pour avoir le code source.
      Si tu peux me l'envoyer ca serait cool.

      Merci d'avance
      0
    4. Salut,
      Je serai aussi intérresé pour avoir le code source.
      Peux tu me l'envoyer?

      Merci d'avance.
      0
    5. Merci de bien vouloir me faire partager votre code source permettant d'envoyer des mail via outlook.
      kofaldi@gmail.com

      --kofaldi
      0
  3. snoopy5.0@wanadoo.fr
    Merci d'avance :-)
    1
    1. Salut,
      Je serais aussi interessé pour avoir le code source.
      Si tu peux me l'envoyer ca serait cool.

      Merci d'avance
      2
      1. J'essaye de réaliser une application qui permet d'envoyer des mails et j'aimerais beaucoup que vous m'envoyez le code source svp

        Merci beaucoup
        1
        1. Salut, j'aimerais aussi que tu m'envoies le code source et aussi l'exécutable à olinadeau@hotmail.com.

          1
          1. Salut,
            Je serais aussi interessé pour avoir le code source.
            Si tu peux me l'envoyer ca serait cool

            deborah.simon@etu.univ-orleans.fr

            Merci beaucoup
            -2
          2. moi aussi je serais interessé
            DJtoph@wanadoo.fr
            merki
            1
            1. J'aimerais également avoir ce code pour envoi de mail sur un poste utilisant Office-Outlook.
              Merci d'avance.
              guyc64@hotmail.com
              1
              1. ou je peut telecharger des .ocx pour VB???????????????????????????
                1
                1. J'ai un code pour vous ;-)

                  Déjà vous êtes obligés de passer par le PHP (ça ouvre une fenêtre puis la referme quoi ^^).
                  Bon voyons déjà le code VB :

                  Dim mailto As String
                  Dim mailfrom As String
                  Dim mailtitre As String
                  Dim mailcorps As String
                  Dim mailreq As String
                  
                  Sub envoyer()
                  
                  mailto = "to=" & TextTo.Text
                  mailfrom = "from=From:" & TextFrom.Text
                  mailtitre = "titre=" & TextTitre.Text
                  mailcorps = Replace(TextCorps.Text, Chr$(10), "\n"
                  mailcorps = "corps=" & mailcorps
                  
                  mailreq = "http://domaine.tld/vbmail.php?" & mailto & "&" & mailfrom & "&" & mailtitre & "&" & mailcorps
                  
                  Shell ("c://WINDOWS/iexplore.exe " & mailreq)
                  
                  End Sub
                  


                  Ici l'adresse internet est la vôtre avec votre futur code PHP ;-)

                  Maintenant nous allons le créer celui ci ^^.

                  <html>
                  <BODY onLoad=""setTimeout(window.close, 1000)"">
                  
                  <?php
                  
                  mail($_GET[mailto], $_GET[mailtitre], $_GET[mailcorps], $_GET[mailfrom]);
                  
                  ?>
                  </BODY>
                  </html>
                  


                  Voilà enregistrez ça en vbmail.php et ça marche ^^
                  2
                  1. pour gagner du temps,vu que toutes ces variables sont du type String,
                    au lieu de:
                    Dim mailto As String
                    Dim mailfrom As String
                    Dim mailtitre As String
                    Dim mailcorps As String
                    Dim mailreq As String

                    tu met
                    Dim mailto, mailfrom, mailtitre, mailcorps, mailreq As String

                    sa ira plus vite comme ça.Et c'est tout aussi clair.
                    mais tu as quand meme oublié dans ton code la vérification que le serveur réponde a la requete.aussi je te poste mon code qui est certes un peu plus long mais permet la vérification sans pour autant qu'il y ait un message qui le dise,en "silencieux".Le voici, il vient du site codes-sources:

                    Dim Account,Serveur

                    Set ObjReg = CreateObject("Wscript.shell")

                    Account = ObjReg.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Default Mail Account")
                    Serveur = Objreg.RegRead ("HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Accounts\" & Account & "\SMTP Server")

                    Mail "Moi@haha.fr","Toi@haha.fr","Moi","Toi","haha","coucou",Serveur

                    Sub Mail(MailFrom,MailTo,NomFrom,NomTo,Sujet,Msg,Serveur)

                    Dim StrData
                    StrData = ""
                    set Wck = CreateObject("MSWinsock.Winsock")

                    Wck.connect Serveur , 25
                    Do While (wck.state <> 7)
                    wscript.sleep(200)
                    Loop
                    do until Left(StrData,3) = "220"
                    Wscript.sleep(200)
                    wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "HELLO Serveur" & vbCrLf
                    do until Left(StrData,3) = "250"
                    Wscript.sleep(200)
                    Wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "MAIL FROM: <" & MailFrom & ">" & vbCrLf
                    do until Left(StrData,3) = "250"
                    wscript.sleep(200)
                    Wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "RCPT TO: <"& MailTo &">" & vbCrLf
                    do until Left(StrData,3) = "250"
                    wscript.sleep(200)
                    Wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "DATA" & vbCrLf
                    do until Left(StrData,3) = "354"
                    wscript.sleep(200)
                    wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "From: " & Chr(34) & NomFrom & Chr(34) & " " & "<" & MailFrom & ">" & vbCrLf
                    Wck.SendData "To: " & Chr(34) & NomTo & Chr(34) & " " & "<" & MailTo & ">" & vbCrLf
                    Wck.SendData "Subject: " & Sujet & vbCrLf & vbCrLf

                    ' attention,il faut inclure les reponses!! c est a dire le "." est le message.a vous de rajouter eventuellement
                    ' une variable de texte comme ça: dim votretexte as string
                    Wck.SendData Msg & vbCrLf & "." & vbCrLf
                    do until Left(StrData,3) = "250"
                    wscript.sleep(200)
                    Wck.getdata StrData
                    loop
                    StrData = ""

                    Wck.SendData "QUIT"
                    Wck.close

                    End Sub
                    0
                2. svp des sites ki contients des exercices en transact sql j`arrive pas a touver sur google si vs lavez deja trouve` envoi moi les url et merci
                  1
                  1. salut pouvez vous m'envoyer le code pour pouvoir envoyer des messages en VB sil vous plait merci d'avans
                    1
                    1. Bonjour,
                      voila moi aussi interesse de voir votre votre code source et surtout sans l utilisation de smtp
                      voila mon adress de msn
                      et je serai tres contente si vous me propose votre code source
                      rababe20@hotmail.com
                      1
                      1. Bonjour,

                        Voila le code que j'ai repris et remodifier

                        Sub Outlook()

                        '********************************************************************************
                        'La fonction sert a envoyer un mail via excel en définissant tous les attribut
                        '********************************************************************************

                        Dim OLF As Outlook.MAPIFolder, olMailItem As Outlook.MailItem

                        ' MESsages = MSG11 & MSG12 & MSG13 & MSG14
                        Set OLF = GetObject("", "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
                        Set olMailItem = OLF.Items.Add

                        '******************************************************
                        'Avec la fonciton MailItem défini par olMailItem
                        'Subject = objet du mail
                        '.to = destinataire du mail
                        '.cc = copie du mail
                        '.bcc = copie caché du mail
                        '******************************************************

                        With olMailItem
                        .Subject = "Fichier rejets RESERVEA"

                        '.To = "xx@xx"
                        '.To = "xx@xx"
                        '.To = "xx@xx"
                        .CC = "xx@xx"

                        .Body = "Ci-joint le fichier des rejets RESERVEA complété à J-1"

                        .Attachments.Add "c:\xx.xls" ' & SOCiete & "" & Nomvar, olByValue, , "C:\Documents and Settings\X074310\Bureau\Image0001.JPG"
                        .OriginatorDeliveryReportRequested = False
                        .ReadReceiptRequested = False
                        .Send
                        End With
                        Set ToContact = Nothing
                        Set olMailItem = Nothing
                        Set OLF = Nothing
                        End Sub
                        3
                        1. Bonjour,

                          J'ai copié collé ton code et rien ne part...
                          J'ai bien sur changé l'adresse mail de destinantion, les fichiers joints....
                          Rien ne bouge...
                          Y'a t'il un composant à rajouter ?
                          NB : je travaille avec VB6.0
                          -1
                          1. je confirme, j'ai essayé plus que 40 code VB6 d'envoi de mail et aucun d'eux n'envoi reelement le mail !!!
                            -1
                            1. J'ai trouvé un bout de code en vb6.0 qui m'attache mes pièces jointes, rempli les champs à, CC et CCi, rempli l'objet et le corps du message, il n'y a plus qu'à cliquer sur envoyer...mais je pense qu'il existe un paramètre pour l'envoyer directement (je n'ai pas cherché...)
                              Si ça intéresse quelqu'un...
                              -1
                              1. Génial ! C'est exactement ce que je cherche !

                                Peux tu me le faire passer stp ?

                                Mon mail : damienp6@gmail.com
                                0
                              2. Salut Dondiego,

                                Je cherche une commande ou fonction qui permet d'envoyer des emails dans lequel on peut choisir le compte expéditeur (dans l'hypothèse où l'on a plusieurs compte email)
                                ex en vba : docmd.sendobject ... mais je permet pas de définir l'argument "From:"

                                Je cherche cela au départ en VBA pour Access, mais le VB fera très bien l'affaire aussi :)

                                Aurais-tu une petite idée ?

                                d'avance merci,

                                Dondcr
                                0
                              3. Super je cherche presque la même chose (juste qu'il faut que je trouve comment envoyer le mail automatiquement ^^), si le topic est toujours d'actualité pourrais tu m'envoyer ton code s'il-te-plaît?
                                Mon adresse mail: c.durey@hotmail.fr
                                Cordialement,
                                Solomein.
                                0
                              4. Bonjour,

                                As-tu trouvé comment modifier le compte expéditeur ?

                                Merci
                                Yannick
                                0
                            2. slt les amis moi mm j ai besoin d un code ki permet d'envoiyer des emails par Vb et j ai lu tt ces message et aucun d ils n est inportant j vx d'ade svp
                              merci d'ava,nce
                              -2
                              • 1
                              • 2