- '''""""""""""""""""""""""""""""""""""""""""""""""""""'''
- ' 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