begin process at 2012 02 12 16:51:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > FONCTION ENVOI DE MAIL PAR VBA SANS CLIENT LOCAL, PAR SERVEUR SMTP

FONCTION ENVOI DE MAIL PAR VBA SANS CLIENT LOCAL, PAR SERVEUR SMTP


 Information sur la source

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Classé sous :Mail, access, smtp, cdo, authentification Niveau :Débutant Date de création :01/02/2008 Vu :19 868

Auteur : pifou25

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note


 Description

Cette fonction est simple, courte, facile à utiliser, elle ne nécessite pas de Outlook ou autre Lotus installé en local, somme toute ça semble idéal. Il faut juste une DLL, donc cocher la référence associée:
"Microsoft CDO for windows 2000 library"
(correspondant au fichier system32/cdosys.dll)

Cette fonction envoie le mail avec la ou les pièce(s) jointe(s) (je n'utilise pas de body - texte dans le mail mais ça peut s'ajouter dans la fonction)
Pratique pour l'envoi en masse de messages sur une base Access.

J'utilise les constantes suivantes pour la configuration:

' configuration SMTP pour envoi de mail
Public Const MAIL_SENDUSING = 2
Public Const MAIL_AUTHENTICATE = 1
Public Const MAIL_CPT_SENDUSR = "<nom du compte>"
Public Const MAIL_CPT_SENDPASS = "<passe du compte>"
Public Const MAIL_FROM = "<mail de l'expéditeur>"
Public Const MAIL_SMTP_SERVER = "<nom serveur>"
Public Const MAIL_SMTP_SERVERPORT = 25

Source

  • '''""""""""""""""""""""""""""""""""""""""""""""""""""'''
  • '
  • ' FONCTION : envoyer un mail par SMTP
  • ' pstrTo : 1 ou plusieurs destinataire(s)
  • ' pstrSubject : objet du mail
  • ' pvarAttachFile : 1 ou plusieurs fichiers joints - string ou array de string
  • '
  • '''""""""""""""""""""""""""""""""""""""""""""""""""""'''
  • Public Function SMTPSendMail(pstrTo As String, pstrSubject As String, Optional pvarAttachFile As Variant) As Boolean
  • On Error GoTo SMTPSendMail_Err
  • Dim i As Long
  • Dim objEmail As New CDO.Message
  • 'Set objEmail = CreateObject("CDO.Message")
  • 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)
  • objEmail.TextBody = ""
  • ' 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 pvarAttachFile ' "C:\temp\Bon de commande.pdf"
  • End If
  • End If
  • With objEmail.Configuration.Fields
  • .Item(CdoConfiguration.cdoSendUsingMethod) = MAIL_SENDUSING
  • .Item(CdoConfiguration.cdoSMTPAuthenticate) = MAIL_AUTHENTICATE
  • .Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
  • .Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
  • .Item(CdoConfiguration.cdoSMTPServer) = MAIL_SMTP_SERVER
  • .Item(CdoConfiguration.cdoSMTPServerPort) = MAIL_SMTP_SERVERPORT
  • .Update
  • End With
  • objEmail.Send
  • SMTPSendMail = True
  • Exit Function
  • SMTPSendMail_Err:
  • MsgBox Err.Description
  • End Function
'''""""""""""""""""""""""""""""""""""""""""""""""""""'''
'
'   FONCTION : envoyer un mail par SMTP
' pstrTo : 1 ou plusieurs destinataire(s)
' pstrSubject : objet du mail
' pvarAttachFile : 1 ou plusieurs fichiers joints - string ou array de string
'
'''""""""""""""""""""""""""""""""""""""""""""""""""""'''
Public Function SMTPSendMail(pstrTo As String, pstrSubject As String, Optional pvarAttachFile As Variant) As Boolean
On Error GoTo SMTPSendMail_Err

    Dim i As Long
    Dim objEmail As New CDO.Message
    'Set objEmail = CreateObject("CDO.Message")
    
    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)
    objEmail.TextBody = ""
    
    ' 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 pvarAttachFile ' "C:\temp\Bon de commande.pdf"
        End If
    End If
    
    With objEmail.Configuration.Fields
        .Item(CdoConfiguration.cdoSendUsingMethod) = MAIL_SENDUSING
        .Item(CdoConfiguration.cdoSMTPAuthenticate) = MAIL_AUTHENTICATE
        .Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
        .Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
        .Item(CdoConfiguration.cdoSMTPServer) = MAIL_SMTP_SERVER
        .Item(CdoConfiguration.cdoSMTPServerPort) = MAIL_SMTP_SERVERPORT
        .Update
    End With
    objEmail.Send

    SMTPSendMail = True
Exit Function
SMTPSendMail_Err:
    MsgBox Err.Description

End Function

 Conclusion

LA fonction renvoie TRUE en cas de succès, false sinon.

J'ai remarqué que si j'enlève la ligne suivante, les pièces jointes peuvent être illisibles (zip) ou incomplètes (pdf à moitié vierges!):
objEmail.TextBody = ""
Donc même si j'ai aucun texte dans le mail je le laisse.


 Sources du même auteur

[OOBASIC] DIRLIST - FONCTION LISTE DES FICHIERS / RÉPERTOIRE...
FONCTIONS INSERT UPDATE POUR ACCESS PROJET ADP
Source .NET (Dotnet) STRUCTURE MATRICE : SURCHARGE DES OPÉRATEURS POUR LE CALCUL ...
Source avec Zip Source .NET (Dotnet) BIGINT! UNE STRUCTURE POUR SURCHARGER LES ENTIERS (LONG) SAN...
Source .NET (Dotnet) CALCUL DE NOMBRES COMPLEXES, À L'AIDE D'UNE STRUCTURE SIMPLE...

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ENVOI MAIL AVEC MERLIN LE MAGICIEN par hackoo
Source avec Zip Source avec une capture SMTP : PROJET COMPLET D'ENVOI DE COURRIEL, SANS UTILISATION ... par fkuchta
Source avec Zip Source avec une capture [HTA] SMTP MAIL CLIENT AVEC PIÈCE-JOINTE par hackoo
Source avec Zip Source avec une capture [VBS] ENVOYER UN E-MAIL EN HTML AVEC PIÈCE-JOINTE EN VBSCRIP... par hackoo
ENVOI DE MAIL(MAILING ET/OU MAILBOMBING, ENVOI SYNCHRONE/ASY... par theoutlawz

Commentaires et avis

Commentaire de Apa 23 le 04/02/2008 10:48:20


Claire que la fonction est simple d'utilisation :)

NB : peut-on utiliser le format html ?

Commentaire de pifou25 le 04/02/2008 13:41:41

En fait oui, on peut utiliser le format HTML dans le mail, il suffit de remplacer Textbody par:
objEmail.TextBody = "... msg HTML ..."

Commentaire de guyvdv le 05/02/2008 18:38:33

Bj APA
J'ai essaié ta fonction dans un script simple en VB express 2005
Il y a deux error:
  'CdoConfiguration.' n'ai pas connue
  'IsMissing' non plus.
Peu tu M'aider
A+
Guy van der Velden

Commentaire de fil57 le 06/02/2008 10:44:58 7/10

super code simple et efficace, remplace WorldMerge(de coloradosoft qui doit être basé sur la même DLL) et intégré en MS Access.
Appréciable gain de temps

Commentaire de pifou25 le 06/02/2008 18:17:46

Guyvdv >
pour CdoConfiguration : comme j'ai dit dans la description il faut ajouter la référence "Microsoft CDO for windows 2000 library"
Mais surtout j'ai fait ça en VBA Access 2003 je doute que ça se traduise simplement en VB (je suppose .NET) 2005. en particulier le pb sur 'SiMissing' vient de la mais je ne sais pas t'aider plus.

Commentaire de guyvdv le 12/02/2008 10:26:38

Bj Apa
Le DLL je l'avais deja ajoute alors tu a raison, ca ne fonctionne pas en VB
Merci tou de meme
Guy van der velden

Commentaire de Apa 23 le 12/02/2008 15:09:13



J'ai un peu joué avec le CDO mais j'ai utilisé celui de exchange situé par défaut --> 'C:\Program Files\Common Files\Microsoft Shared\CDO\CDOEX.DLL'
le code s'execute parfaitement (en faisant qcq modif de syntaxe) sur Visual Basic 6.0 SP5 (--> Vielle école) ;)

Pour envoyer un mail HTML voici la commande en place de 'objEmail.TextBody'
ex : objEmail.HTMLBody = "<br><br><br><br>Hello World<br><br><br><br>" '__Les <br> c'est juste pour tester le code html

Je pense que vous pouvez aussi utiliser un fichier html (j'ai pas testé)
ex : strMonFichier = "C:\Pagededata.html"
objEmail.CreateMHTMLBody "file://" & strMonFichier '__Je ne suis pas sûr de la command 'CreateMHTMLBody' mais je pense que c'est bon

Commentaire de guyvdv le 13/02/2008 15:42:36 8/10

cherAPA

j telecharge cdoexe.dll chez www.dlldll.com (microsoft exige Outlook 7)
j copie le fichier dans le root du programme
ET CA FONCTIONNE
j deja envoie un email a moimeme
j donne 8 stars
merci
Guy

Commentaire de andalo le 23/05/2008 15:33:51

bonjour à tous
Je desespere de faire fonctionner ce code. En fait, je patauge encore un peu dans ces histoires de protocole SMTP et je commence à me poser des question existentielles :
1- Est il possible de faire fonctioner un tel code avec une adresse expediteur de type bidule@yahoo.fr, le serveur smtp etant alors smtp.yahoo.fr ou smtp.mail.yahoo.fr?
2- Ou faut il imperativement utiliser une adresse d'un fournisseur d'acces internet?
3- If  question 1 = False And quetion 2 = true then : Comment faire pour un envoie de mail auto, suis je oblige de connaitre le serveur smtp de la personne, son mot de pass et le smtp qui va bien avec, ou puis je m'autoenvoyer un mail en me servant de deux adresse perso a partir du poste d ela personne utilisant mon appli??

C'est peut etre un peu tordu mais dans ma tête c'est clair, même si je n'arrive pas a le faire!

Commentaire de katchi92 le 25/09/2008 19:16:33

Bonjour,
J'ai utilisé le code ci-après pour envoyer des e-mail sous excel en VBA mais sans client local.
FONCTION ENVOI DE MAIL PAR VBA SANS CLIENT LOCAL, PAR SERVEUR SMTP

Ce code fonctionne à merveille, chez moi avec ADSL, merci au développeur, mais pas à mon boulot car je passe par le réseau local.
Comment adapter ce code pour le faire fonctionner ?
Que veut dire les 2 premières ligne des constantes ?
         Public Const MAIL_SENDUSING = 2
         Public Const MAIL_AUTHENTICATE = 1
et la dernière
         Public Const MAIL_SMTP_SERVERPORT = 25

Merci d'avance,

PSWMK

Commentaire de pifou25 le 25/09/2008 22:58:33

ce n'est peut etre pas évident d'arriver à atteindre le serveur SMTP via un réseau local, il peut y avoir des pare-feu, proxy... tout un tas d'obstacle. et surtout le serveur peut vérifier qu'on ne l'atteind pas à partir de n'importe ou: votre FAI ADSL vous autorise lorsque vous etes connecté sur son réseau, mais de l'extérieux c'est probablement interdit!
De même ça me parait illusoire de vouloir utiliser le serveur SMPT de yahoo même si vous avez un compte chez eux. à mon avis les conditions requises sont:
utiliser une adresse d'un fournisseur et son serveur SMTP à condition d'être connecté chez lui
ou
avoir votre propre adresse mail (pas une redirection) avec un fournisseur de mail qui accepte les requetes SMTP
ou, le mieux: avoir son propre serveur SMTP sur un nom de domaine, entreprise ou réseau local!

Commentaire de Superbaba75 le 05/06/2009 10:53:51

Je vins d'inserer cette fonction au sein d'un de mes procedures vba [AC2007]mais j'obtiens systématiquement le message d'erreur suivant "Au moins un destinataire est requis, mais aucun n'a été trouvé."
Je précise que  objEmail.From = MAIL_FROM
pour la variable MAIL_FROM contient bien une adresse de messagerie du style "monadresse@free.fr", j'ai même tenté de déclaré la variable directement au sein de la procedure, même message...
Ensuite j'ai réactivé la ligne :

    Set objEmail = CreateObject("CDO.Message")

(qui était en commentaire dans l'exemple)
Toujours impossible de faire partir le mail


Commentaire de Superbaba75 le 05/06/2009 12:08:55

Oups !désolé mais encore une fois je me suis trop précipité ! le champs destinataire est à déclaré dans l'instruction :
                     objEmail.To = "adresseexpediteur@fai.fr"
j'ai donc corrigé mon erreur, dans le champ MAIL_FROM c'est bien mon nom ou l'entreprise qui doit y figurer...
Mais hélas une fois ces modifications apportées, j'obtiens un nouveau message d'erreur : "Le message n'à pu être envoyé vers le serveur SMTP. Le code erreur de transport était 0x80040217. La réponse du serveur était not available (non disponible ?)"
Pourtant au sein de mon module toutes les variables sont bien initialisées
Je fais l'essai directement sur place.
Ma messagerie est bien configurée sur le SMTP de leur fournisseur d'accès (wanadoo.fr)
J'utilise pour cet essai ma propre messagerie sur free, avec mon identifiant et mon propre mot de passe de messagerie.
par contre j'ai laissé les variables MAIL_SENDUSING  = 2 , MAIL_AUTHENTICATE = 1 , MAIL_SMTP_SERVERPORT = 25

Commentaire de Apa 23 le 05/06/2009 12:56:01


Voici ma fonction pour envoyer des mails : Ne t'occupe pas du 1er paralètre c'est juste ma gestion d'erreur, tu peux la retirer. Sinon tu remarqueras que je n'utilise pas le usr/pass car par défaut la dll utilise le compte internet actif.
Voilà en espèrant que cela te mette sur la voie. Sorry mais c'est du VB6 normalement ton code ne devrais pas être très différents.

'__Send email using exchange CDO
'__IN  : pstrFrom -> email of the sender (default test@test.be)
'__      pstrTo -> destination email
'__      pstrSubject -> email subject
'__      pstrEmailText -> email content
'__      pbHtmlMail -> pstrEmailText is on html or simple text
'__OUT : pRetErr -> errors infos
Public Function SendEmail_L2(ByRef pRetErr As RetErrInfo, _
                             ByVal pstrFrom As String, _
                             ByVal pstrTo As String, _
                             ByVal pstrSubject As String, _
                             ByVal pstrEmailText As String, _
                             ByVal pbHtmlMail As Boolean) As RetServerValue
1     Dim objEmail As New CDO.Message
On Error GoTo ERR_EXIT
2     SendEmail_L2 = RET_BAD

      '__Prepare mail data
3     objEmail.From = pstrFrom
4     objEmail.To = pstrTo
5     objEmail.Subject = pstrSubject
6     If (pbHtmlMail) Then
7       objEmail.HTMLBody = pstrEmailText
8     Else
9       objEmail.TextBody = pstrEmailText
10    End If

      '__Email configuration
11    With objEmail.Configuration.Fields
12      .Item(CdoConfiguration.cdoSendUsingMethod) = 2 '__MAIL_SENDUSING
13      .Item(CdoConfiguration.cdoSMTPAuthenticate) = 1 '__MAIL_AUTHENTICATE
14      .Item(CdoConfiguration.cdoSMTPServer) = g_strSmtpServer '__MAIL_SMTP_SERVER
15      .Item(CdoConfiguration.cdoSMTPServerPort) = g_nSmtpPort '__MAIL_SMTP_SERVERPORT
        '.Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
        '.Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
16      .Update
17    End With

18    objEmail.Send
19    DoEvents
20    SendEmail_L2 = RET_OK
21    Exit Function

22 ERR_EXIT:
23    pRetErr = GetErrMsg(Err, "", "SendEmail_L2", Erl)
End Function

Commentaire de Superbaba75 le 05/06/2009 14:36:21

Merci pour ton aide, mais je ne maitrise pas encore toutes les subtilités du VB..
J'ai donc un formulaire sous access avec un bouton qui déclenchera le départ du mail sur l'événement click.
Donc j'ai mis le code suivant sur mon bouton:
                     Private Sub EnvoiMailAuto_Click()
                     Call SendEmail_L2
                     End Sub

et j'ai recopié les lignes de ta fonction dans un module de mon application.
J'ai initialisé au début les variables concernant le test.
Mais au lancement de mon formulaire et du click sur le bouton,

Public Function SendEmail_L2(ByRef pRetErr As RetErrInfo, _
                             ByVal pstrFrom As String, _
                             ByVal pstrTo As String, _
                             ByVal pstrSubject As String, _
                             ByVal pstrEmailText As String, _
                             ByVal pbHtmlMail As Boolean) As RetServerValue

est surligné et j'obtiens le message suivant :

" Erreur de compilation
Type défini par l'utilisateur non defini"

?

Commentaire de Apa 23 le 06/06/2009 19:23:15

Oui c'est tout à fait normal comme je l'ai indiqué j'ai utilisé des gestions d'erreurs qui me sont propre remplace dans la déclaration de la fonction par ces lignes :

Public Function SendEmail_L2(ByVal pstrFrom As String, _
                             ByVal pstrTo As String, _
                             ByVal pstrSubject As String, _
                             ByVal pstrEmailText As String, _
                             ByVal pbHtmlMail As Boolean) As Long

Et voici à quoi doit ressembler le code de la fonction :

1     Dim objEmail As New CDO.Message
On Error GoTo ERR_EXIT
2     SendEmail_L2 = 2

      '__Prepare mail data
3     objEmail.From = pstrFrom
4     objEmail.To = pstrTo
5     objEmail.Subject = pstrSubject
6     If (pbHtmlMail) Then
7       objEmail.HTMLBody = pstrEmailText
8     Else
9       objEmail.TextBody = pstrEmailText
10    End If

      '__Email configuration
11    With objEmail.Configuration.Fields
12      .Item(CdoConfiguration.cdoSendUsingMethod) = 2 '__MAIL_SENDUSING
13      .Item(CdoConfiguration.cdoSMTPAuthenticate) = 1 '__MAIL_AUTHENTICATE
14      .Item(CdoConfiguration.cdoSMTPServer) = g_strSmtpServer '__MAIL_SMTP_SERVER
15      .Item(CdoConfiguration.cdoSMTPServerPort) = g_nSmtpPort '__MAIL_SMTP_SERVERPORT
        '.Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
        '.Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
16      .Update
17    End With

18    objEmail.Send
19    DoEvents
20    SendEmail_L2 = 1
21    Exit Function

22 ERR_EXIT:
23    Call Msgbox (Err.Description)

Chose important si tu utilises le CDO tu dois abolument avoir cette dll, répertoire par défaut 'C:\Program Files\Common Files\Microsoft Shared\CDO\CDOEX.DLL'

Commentaire de Superbaba75 le 08/06/2009 11:16:03

Merci pour tes explications, mais je viens de suivre tes indications, et j'obtiens toujours le même message/
"Le message n'à pas pu être envoyé...."
J'en déduis que les variables pour le from, to, subject sont bonnes sinon j'obtiendrai également un message d'erreur. ca bloque au moment de l'éxécution de ces lignes :

      '__Email configuration
    With objEmail.Configuration.Fields
      .Item(CdoConfiguration.cdoSendUsingMethod) = 2 '__MAIL_SENDUSING
      .Item(CdoConfiguration.cdoSMTPAuthenticate) = 1 '__MAIL_AUTHENTICATE
      .Item(CdoConfiguration.cdoSMTPServer) = g_strSmtpServer '__MAIL_SMTP_SERVER
      .Item(CdoConfiguration.cdoSMTPServerPort) = g_nSmtpPort '__MAIL_SMTP_SERVERPORT
        '.Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
        '.Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
      .Update
    End With

    objEmail.Send

?

Commentaire de Apa 23 le 08/06/2009 14:48:46


Es-tu sûr de ton server SMTP et de ton port. Essaie d'envoyer un mail avec outlook par example avec les même configuration si ça fonctionne sous outlook il n'y a aucune raison que cela ne fonctionne pas avec le CDO ou sinon cela peut-être aussi à cause de ton Anti-virus ou firewall qui autorise outlook à sortir mais pas ton soft.

Commentaire de Superbaba75 le 08/06/2009 15:10:52

Oui je suis sur de mon SMTP et de mon port, je possède incredimail et j'envoie  et reçois sans problèmes mes mails, de plus si j'utilise en interne accès pour convertir un état, la transformation en pdf et ensuite l'envoi directement par mail, il paMrt sans problèmes...
Merci pour ton aide.

Commentaire de YPMN le 10/09/2009 18:10:02

salut!

Je viens de suivre avec attention les différents niveaux de l'évolution du commentaires autour de ce code. OK.

Maintenant, moi, c'est autour de la réception des mails et fichiers joint sur un serveur pop3 (ex: pop3.mail.yahoo.fr) que j'ai problème. Si vous pouvez m'aider à l'aide d'un exemple de préference à l'aide de la réference CDO. SVP SUIS BLOQUE.

Commentaire de pifou25 le 10/09/2009 21:01:37

je n'ai aucune idée à savoir si cette librairie permettait de recevoir du courrier... pour moi elle ne sert qu'à en envoyer!

Commentaire de YPMN le 11/09/2009 21:50:20

Salut!

Alors je vous prie de me proposer une procédé permettant de recuperer les mails (en distinguant les lus des non-lus) dépuis un serveur pop (ex: pop3.mail.yahoo.fr) y compris les fichiers y attachés en dehors du recours au winsock (qui exige beaucoup plus de renseigner l' IP, chose qu'on ne connait pas toujours ...) me complique un peu. Il est vrai que certaines possibilités soient proposées sur ce site (j'en ai vu); mais le vrai problème est que mon niveau dans ce domaine est vraiment bas que j'ai du mal interpreter certaines lignes surtout avec les apis... Donc, Si bien que le code soit compliqué, mais si vous acceptez de me le passer avec une explication claire, ça m'aiderait  grandement SVP. Je compte sur vous.

Commentaire de nkerjean le 22/10/2009 07:32:46

pas de commentaire

Commentaire de pifou25 le 22/10/2009 20:47:08

merci pour le commentaire de nkerjean :p

Ypmn ... je te conseille d'installer un client genre thunderbird ou outlook express, ça fait tout ce que tu demande et plus encore.

Commentaire de Thunderbirds72 le 28/12/2009 11:46:55 10/10

Bonjour Pifou25,

Nickel ce code, fonctionne à merveille
Merci beaucoup

Commentaire de developpeurista le 29/03/2011 00:25:09

merci boucoup

Commentaire de jb2718 le 08/07/2011 23:25:37

Bonjour
J'utilise depuis longtemps, sous windows XP et ACCESS 2007, quasiment telle quelle, la fonction de Pifou25, et je n'ai jamais eu de problème (merci à lui!)
Actuellement je suis en train de changer d'ordinateur : je passe de XP à Windows 7 (mais je conserve ACCESS 2007 pour le moment)
Et sous cette configuration,  la fonction - recopiée telle quelle - plante !!!
Le message se trouve être le même que celui signalé plus haut par Superbaba75 :

"Le message n'a pu être envoyé vers le serveur SMTP. Le code d'erreur de transport était 0x80040217. La réponse du serveur était not available"

J'ai désactivé le pare-feu, et l'antivirus, sans succès.
Le logiciel de messagerie que j'ai installé (Windows Live mail) fonctionne correctement.
Sur l'autre ordinateur, en XP, ça continue de fonctionner normalement.
Le passage de XP à W7 semble donc poser problème, mais je ne sais pas trop où chercher...
Si quelqu'un a une idée je suis preneur et je le remercie par avance.

Commentaire de jb2718 le 09/07/2011 13:14:44

En fait, de façon empirique, en comparant avec d'autres codes, j'ai trouvé une solution à mon problème :

Dans le pavé :

With objEmail.Configuration.Fields
.Item(CdoConfiguration.cdoSendUsingMethod) = MAIL_SENDUSING
   .Item(CdoConfiguration.cdoSMTPAuthenticate) = MAIL_AUTHENTICATE
   .Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
   .Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
   .Item(CdoConfiguration.cdoSMTPServer) = MAIL_SMTP_SERVER
   .Item(CdoConfiguration.cdoSMTPServerPort) = MAIL_SMTP_SERVERPORT
   .Update
End With

J'ai remplacé les 6 lignes :

.Item(CdoConfiguration.cdoSendUsingMethod) = MAIL_SENDUSING
   .Item(CdoConfiguration.cdoSMTPAuthenticate) = MAIL_AUTHENTICATE
   .Item(CdoConfiguration.cdoSendUserName) = MAIL_CPT_SENDUSR
   .Item(CdoConfiguration.cdoSendPassword) = MAIL_CPT_SENDPASS
   .Item(CdoConfiguration.cdoSMTPServer) = MAIL_SMTP_SERVER
   .Item(CdoConfiguration.cdoSMTPServerPort) = MAIL_SMTP_SERVERPORT

Par celles-ci :

   .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = MAIL_SENDUSING
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = MAIL_SMTP_SERVER
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = MAIL_SMTP_SERVERPORT



Et ça marche,(sans qu'il soit besoin d'utiliser les constantes MAIL_AUTHENTICATE MAIL_CPT_SENDUSR MAIL_CPT_SENDPASS apparemment)

mais veuillez ne pas trop me demandez pourquoi :-)

Commentaire de siinoxcodeS le 08/02/2012 08:59:11

Bonjour !
Merci pour ce code qui fonctionne à merveille !
Je suis actuellement en stage et j'ai toutefois quelques question :
- Est-il possible passer en paramètre un mail de réponse différent de notre mail d'expéditeur (Le client répondra alors sur cette adresse) ?
- Plus important, je vois qu'il est possible d'envoyer le message à plusieurs destinataires mais je n'ai pas trouvé comment faire hélas, pourriez vous me donner des pistes ?
- Pour finir, est-il possible d'envoyer le message en Bcc ? (En effet pour l'entreprise dans laquelle j'effectue mon stage il n'est pas question que les clients puissent voir à qui d'autre a été envoyé le message...)

J'espère que vous pourrez me débloquer sur ces points (surtout les deux derniers).
Merci d'avance :-)

Commentaire de siinoxcodeS le 08/02/2012 09:09:24

En fait, pour le Bcc c'est bon, j'avais pas pensé à regarder si une méthode existé déjà, il suffit simplement de remplacer objEmail.To = pstrTo
par : objEmail.BCC = pstrTo

J'avais déjà réussi à envoyer plusieurs pièces jointes en passant par un array, est-ce la même procédure pour les destinataires ?

Commentaire de jb2718 le 08/02/2012 12:19:33

Bonjour

Pour l'envoi à plusieurs destinataires, il suffit de les indiquer en séquence en les séparant par des points-virgules.
Exemple "jean.dupont@sfr.fr;alfred.durand@free.fr"

Cordialement

PS - pour l'envoi en copie cachée vous auriez pu ajouter un paramètre suplémentaire au lieu de le substituer à objEmail.To
Pour ma part j'ai généralisé la fonction de la façon suivante :

Public Function SMTPSendMail(Emetteur As String, _
                           Dest As String, _
                           Optional Cc As String, _
                           Optional CCi As String, _
                           Optional Objet As String, _
                           Optional Texte As String, _
                           Optional Pj As Variant _
                           ) As Boolean

[...]

objMessage.From = Emetteur
objMessage.To = Dest
objMessage.Cc = Cc
objMessage.BCC = CCi
objMessage.Subject = Objet
objMessage.TextBody = Texte

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

authentification SMTP [ par PatDeLaYaute ] Bonjour,je suis en train de faire un formulaire d'envoi de mail à partir de mon projet.Le problème pour envoyer le mail j'utilise le serveur de l'hebe Smtp avec authentification [ par Nicolas75 ] Bonjour à tousActuellement je réalise une petite appli en VB6 dans laquelle j'utilise le contrôle winsock pour un envoi par mail.Winsock que j'utilise envoi d mail via vb [ par kamilia911 ] kikou tt l monde,je vous explique mon cas. j ve envoyer des mail via  vb .j'ai mis le code suivant :Dim config As CDO.ConfigurationDim email As CDO.Me problème pour smtp [ par azzben ] Bonjours ,voila j'ai un problème avec mon smtp sur visual basic 2008 je vous donnes mes codes sources :Imports System.Web.mailImports System.Web.utilI Seveur SMTP:objSMTPClient = New System.Net.Mail.SmtpClient("smtp.live.com ", 25) [ par majdou345 ] Salut,est ce que les paramètres des cette fonction pour envoie d'email son juste???:objSMTPClient = New System.Net.Mail.SmtpClient("smtp.live.com",25) [déplacé VB.NET -> C#] Envoi de mail par SMTP [ par Nawaken ] Bonsoir, je tente avec un pote de faire un programme qui permet de s'enregistrer à un serveur de jeu.Mais quand je suis arrivé à la partie où il faut [VB6] Problème .Update(CDO.Message) [ par Reynas ] Bonjour tout le monde, Je sollicite votre aide car j'ai un petit souci j'ai recuperer un code afin de pouvoir envoyer des mails via VB6 avec la com Passer à la ligne dans lecriture d'un texte [ par erokage ] Bonjour,J'ai une fonction qui envoi un mail en vb 2008, et pour faire ma mise en page je veux psser à la ligne ou même sauter une ligne mais je n'y pa Enregistrer un mail d'après son objet, dans une base de donnée Access [ par davekin ] Bonjour, je cherche à écrire une macro VBA dans Outlook qui me permette de copier un mail, possédant un objet défini, dans une base Access. Ceci afin


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,810 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales