begin process at 2008 05 09 23:24:08
1 168 949 membres
534 nouveaux aujourd'hui
13 952 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on ose pas poser une question, ça c'est une erreur !

ENVOYER DES MAIL EN VB6 AVEC SMTP SERVEUR


Information sur la source

Description

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

  • '''""""""""""""""""""""""""""""""""""""""""""""""""""'''
  • ' 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
'''""""""""""""""""""""""""""""""""""""""""""""""""""'''
' 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.
  • signaler à un administrateur
    Commentaire de titi2b le 28/03/2008 15:43:40

    Bonjour

    Pour l'utiliser il faut avoir le serveur virtuel SMTP d'installé?
    C'est bien ça

  • signaler à un administrateur
    Commentaire de titi2b le 28/03/2008 15:59:27

    je me repond ilfaut juste ajouter la reference
    "Microsoft CDO for windows 2000 library"
    a plus

  • signaler à un administrateur
    Commentaire de bob35 le 28/03/2008 16:26:02

    Bonne réponse et merci de la remarque, car il s'agit de mon premier post avec code source, et je m'aperçois que je n'ai pas l'habitude de donner tous les éléments de base. Effectivement il faut ajouter la référence ci dessus citée !!!! pardon pour ceux qui se pose la question.......

  • signaler à un administrateur
    Commentaire de VestaX le 29/03/2008 11:15:24

    salut, c'est exactement ce que je cherchais. je débute depuis tres peu de temps, et j'ai encore du mal. Serait-il possible d'avoir carrément les fichiers afin de voir commet placer ce code et surtout a quel endroit?

    Désolé de faire mon lourdeau, mais le fait d'avoir les fichiers, m'aiderais vraiment a mieux comprendre le fonctionnement

    Cordialement :)

  • signaler à un administrateur
    Commentaire de yvesyves le 30/03/2008 00:04:05

    Tu as juste a coller cette fonction dans un form, un module, ce que tu veux et à l'appeler. Il ne va pas mettre des fichiers pour une fonction de quelques lignes.

  • signaler à un administrateur
    Commentaire de titi2b le 30/03/2008 05:52:00

    Un petit exemple pour ceux qui ne savent pas comment utilisiser les codes sources via un module
    a plus
    très bonnes sources mais ou on note désoler; moi je donnerai un  8/10
    Mais je ne sait pas ou voté
    pardon !!!!

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements