Envoyer des mail en vb6 avec smtp serveur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 116 fois - Téléchargée 18 fois

Contenu du snippet

pour coder un envoi de mail en VB6, sans exécuter de client messagerie. Fonction de base. il s'agit de manipuler un objet CDO, et de coder les instructions de base d'un envoi de message par un serveur SMTP. cela marche bien, et la fonction devient aussi simple d'utilisation que n'importe quelle fonction de base. Prévoir une variable booleenne pour l'utilisation de la fonction, car elle renvoi une info booléenne sur le bon déroulement de l'envoi......

Source / Exemple :


'''""""""""""""""""""""""""""""""""""""""""""""""""""'''
' FONCTION : envoyer un mail par SMTP
'''""""""""""""""""""""""""""""""""""""""""""""""""""'''
 Public Function SMTPSendMail(pstrTo As String, pstrSubject As String, pstrmess As String, Optional pvarAttachFile As Variant, Optional pFileAttach As String) As Boolean
 
'Quelques explications (bob35) sur les modifs apportees:
'======================================================
'---pvarattachfile (variant) est de manière usuelle utilisée avec une booléenne. J'ai mis du temps à comprendre la logique inverse:
'   parm. false = il y a bien un fichier attaché / true = pas de pj (car plus bas on teste avec ismissing)
'ont été rajoutés: 
'---optionnal pfileattach ... string qui pointe sur le fichier que l'on veut attacher.
'---pstrmess .... string qui permet de composer le corps du message et de l'utiliser directement
'---une instruction doevents: pour temporiser le traitement du message, étant plus long que l'exécussion du code VB
'   je me suis aperçu que le retour de fonction ne laissait pas le temp au système de traiter comme "true" le retour de bon fonctionnement
'   de l'envoi (même s'il a été correctement effectué)
 

On Error GoTo SMTPSendMail_Err

 Dim i As Long
 Dim objEmail As New CDO.message
 Set objEmail = CreateObject("CDO.Message")

'MAIL_FROM peut être n'importe quelle variable string (du projet, passée en paramètre supp. de la fonction etc...)
 objEmail.From = MAIL_FROM
 objEmail.To = pstrTo
 objEmail.Subject = pstrSubject

 ' Aucun corps de message, uniquement la pièce jointe
 ' laisser un TextBody avec chaine vide, sinon le mail peut planter (pièce jointe incomplète)

'ci dessus la remarque d'origine sur le passage du lien à la PJ. personnellement je l'ai testé non vide ca marche avec 
'une PJ .txt et une .Pdf .... pour le reste ....
'code d'origine:    objEmail.TextBody = ""
 objEmail.TextBody = pstrmess

 ' Ajout de la pièce jointe, 1 ou plusieurs fichiers
If Not IsMissing(pvarAttachFile) Then
    If IsArray(pvarAttachFile) Then
        ' parcourrir le tableau
        For i = LBound(pvarAttachFile) To UBound(pvarAttachFile)
        objEmail.AddAttachment pvarAttachFile(i)
        Next i
    Else
            objEmail.AddAttachment pFileAttach
    End If
End If

 With objEmail.Configuration.Fields
	 'je n'ai pas trop compris la teneur du paramètre, j'ai vu sur le web que "2" était le paramètre mode standard
     .Item(CdoConfiguration.cdoSendUsingMethod) = 2 'MAIL_SENDUSING
	 'idem remarque ci dessus, le param cdoBasic fonctionne ( je n'en sais pas plus	
     .Item(CdoConfiguration.cdoSMTPAuthenticate) = cdoBasic 'MAIL_AUTHENTICATE
	 ' ci dessous remplacer MAIL_CPT_SENDUSR par la string que l'on veut (du moment qu'il s'agisse d'un user name valide chez un FA)
     .Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
	 ' ci dessous le mot de pass (MAIL_CPT_SENDPASS) qui va bien avec le User
     .Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
	 ' nom du serveur smtp (MAIL_SMTP_SERVER)
     .Item(CdoConfiguration.cdoSMTPServer) = MAIL_SMTP_SERVER
	 ' port utilisé ( 25 par défaut, j'aime bien le 5025 il est moins souvant filtré ...)
     .Item(CdoConfiguration.cdoSMTPServerPort) = MAIL_SMTP_SERVERPORT
     .Update
 End With
 DoEvents
 objEmail.Send

 SMTPSendMail = True
 
 Exit Function
SMTPSendMail_Err:
 MsgBox err.Description

End Function

Conclusion :


Fontion simple. Souple et améliorable (la preuve, la source d'origine n'est pas de moi... seulement quelques améliorations pratique). J'ai testé sur mon projet, avec et sans PJ, ca marche plutot bien.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
122
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
18 juillet 2009

j'ajoute une question:
Pourquoi cette instruction à la fin de la fonction (SMTPSendMail = True)?
car la fonction renvoie toujours true même si l'envoie a echoué
Messages postés
122
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
18 juillet 2009

Bonne source mais: bien que la fonction renvoie TRUE le message ne parvient pas à destination,aucun message d'érreur... n'est ce pas bizard ?
avec plusieurs essaies le message n'arrive pas à destination
Messages postés
301
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017

Bonjour à tous,
Très bonne méthode pour envoyer des mails.
Cependant, quelqu'un sait-il comment obtenir via VB ou une API comment obtenir le nom du serveur smtp?
Merci d'avance
Messages postés
8
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
10 juin 2009

Bonjour,
Depuis des jours, j'essaye en vain d'envoyer mes états convertis en PDF par mail, mais j'ai essayé cette méthode et j'obtiens le même message que jardin VB6.
J'ai donc testé une autre méthode trouvé sur ce forum qui émule les touches de mon client de messagerie, mais si la messagerie est fermée ca plante un peu...
Je possède Access 2007.
Merci
Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014

Bonjour
j'essaye d'utiliser le code, mai j'ai le message d'erreur
"Le message n'a aps pu etre envoyé vers le serveur SMTP,Le code d'erreur de transport est 0x80040217.la reposnse du serveur etai not available '
j'ai ajouté :Dim MAIL_FROM As String
Dim MAIL_CPT_SENDUSR As String
Dim MAIL_CPT_SENDPASS As String
Dim MAIL_SMTP_SERVER As String
Dim MAIL_SMTP_SERVERPORT As Single
Toutes mes variables sont bonnes qu'aije oublie ?
merci
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.