Envoie d'email avec VB
RésoluEst-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
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.
-
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-
-
@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 -
@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. -
@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 -
@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
-
-
Regardez une vidéo de Chai1310b qui montre un code vraiment facile :
goo.gl/8ffkw -
As tu essaye System.Net.Mail?
-
Finalement j'ai fignoler avec Mayzz un code qui finalement a marché (pour ceux qui voudront le consulter, il faudra savoir que je suis en Tunisie et que le fournisseur internet de la boîte est Globalnet. Donc il vous suffira de changer le smtp. Exemple : pour gmail vous mettez smtp.gmail.com)
Voici le code : avec VB.NET 2008
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mail As New MailMessage()
'set the addresses
mail.From = New MailAddress("contact@prodit.net")
mail.To.Add("joedassin87@gmail.com")
'set the content
mail.Subject = "sujet de mail"
mail.Body = "le body du mail."
Dim client As New SmtpClient("xsmtp.gnet.tn")
Try
client.Send(mail)
MsgBox("coucou ca va")
Catch ex As Exception
MsgBox("Echec de l'envoi")
End Try
End Sub -
Bonjour,
vous trouverez un logiciel professionnel entièrement gratuit à l'adresse suivante : www.discount-emailing.com
Je viens de l'essayer et tout fonctionne parfaitement ! -
Bonjour,
vous trouverez un logiciel professionnel entièrement gratuit à l'adresse suivante : www.discount-emailing.com
Je viens de l'essayer et tout fonctionne parfaitement ! -
Bon sang ce topic devient de pire en pire...
Pourquoi pas mettre la source sur www.vbfrance.com ?
Ça arrêterait toutes les personnes qui postent pour ça...
En attendant que la source soir déposée (sur vbfrance ou autre)...
Débrouillez vous.
Ps: non, contrairement a ce que vous croyez, je ne fais pas ma loi, j'essaye de rendre "clean" ce topic. -
Bonjour,
Est-ce que je pourrai avoir le code aussi?
parpins@hotmail.com
merci -
Merci pour ce code ca m'a beaucoup servi
-
re:
Bien content que cela serve :-)
Le première ligne ne sert qu'a renseigné le script (le programme) pour savoir
ou envoyer le courriel. Il est nécessaire d'avoir une passerelle SMTP pour
envoyer du courriel.
Comme dans ton logiciel de courriel, tu dois lui indiquer qui est ton FAI.
À moins que tu installe toi-même un service SMTP sur ton système.
Le paramètre [2] spécifie d'utiliser le port courant [ SMTP = port 25 ].
Tu trouveras tous les détails ici :
https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2003/ms870485(v=exchg.65)?redirectedfrom=MSDN
Mais aucun danger, d'inspection, de surveillance, etc ...
Ceci dit, ce sont les espions qui entrent dans les machines qui font
ce genre de trouble.
Lupin -
slt, j'ai le code en vb pour l'envoi des aisl automatiquement mais le proibleme si que je veu joindre le contenu d'un document word comme corps message donc est ce qu'il y paersonne qui ma'ide et je l'aide dans une autre chose s'i veut surtout en c++
n'hestitez pas a me contacter tchao2007@HOTMAIL.FR -
Oubliez ma question j'ai tenté quelque chose et ça marche. Autant dire que j'ai eu la flème de tester avant de laisser mon premier post ;)
++ -
Bonjour,
je me suis servi du dernier code posté ici et il me sert bien ;) Merci!
Par contre j'aimerai attacher plusieurs fichiers-joints sur un même mail. La méthode AddAttachment, tel qu'elle est utilisée ici, peut le faire? ou peut être qu'il y a un index à mettre en place? j'ai pas trouvé d'info là dessus. un petit coup de main?
Merci d'avance :) -
Je me suis fié à ce bout de Code (celui de Lupin.A) pour une petite application cette avant-midi.
Elle sera tester par le tech chez le client en aprem, je vais voir si ça à fonctionner.
Je vous tiens au courant. -
Je serais également par ce code.
Merci
Mail: sangoku152004@yahoo.fr -
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 -
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...-
-
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 -
-
-
-
je confirme, j'ai essayé plus que 40 code VB6 d'envoi de mail et aucun d'eux n'envoi reelement le mail !!!
-
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 -
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
- 1
- 2