Envoyer des mail en vb6 avec smtp serveur

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

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.