FONCTION ENVOI DE MAIL PAR VBA SANS CLIENT LOCAL, PAR SERVEUR SMTP
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010
-
4 févr. 2008 à 10:48
siinoxcodeS
Messages postés5Date d'inscriptionmardi 7 février 2012StatutMembreDernière intervention22 février 2012
-
21 févr. 2012 à 11:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
siinoxcodeS
Messages postés5Date d'inscriptionmardi 7 février 2012StatutMembreDernière intervention22 février 2012 21 févr. 2012 à 11:22
Ah je pensais que les messages que j'avais laissé auparavant n'avaient pas fonctionné.
Merci à toi JB2718, grâce à toi tout marche.
Pour la signature j'ai trouvé une solution, en rajoutant un paramètre signature à la fonction qui me renvoie le chemin d'accès de l'image (car l'utilisateur choisi sa signature) :
Cette ligne pour récupérer juste le nom et l'extension de l'image :
NomSignature = Replace(pstrSignature, "C:\signatures", "")
Ceci fonctionne malheureusement uniquement sur l'ordinateur.
En vérifiant l'email de chez moi, l'image n'apparait pas (petite croix).
Je pensais alors créer un fichier html affichant l'image, et l'utiliser dans le code comme ceci :
CreateMHTMLBody("file://" & CheminFichierHTML)
Mais j'arrive au mieux à aficher le code du fichier HTML dans le message mais pas le contenu..
Si quelqu'un a une idée.
siinoxcodeS
Messages postés5Date d'inscriptionmardi 7 février 2012StatutMembreDernière intervention22 février 2012 17 févr. 2012 à 10:57
Bonjour à tous,
Je suis actuellement en stage et je me sers de cette fonction qui est parfaite en tout point, seulement j'aimerai savoir si il serait possible d'ajouter une signature au mail ?
Merci d'avance
jb2718
Messages postés3Date d'inscriptionmardi 10 mai 2011StatutMembreDernière intervention 8 février 2012 8 févr. 2012 à 12:19
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
siinoxcodeS
Messages postés5Date d'inscriptionmardi 7 février 2012StatutMembreDernière intervention22 février 2012 8 févr. 2012 à 09:09
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 ?
siinoxcodeS
Messages postés5Date d'inscriptionmardi 7 février 2012StatutMembreDernière intervention22 février 2012 8 févr. 2012 à 08:59
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 :-)
jb2718
Messages postés3Date d'inscriptionmardi 10 mai 2011StatutMembreDernière intervention 8 février 2012 9 juil. 2011 à 13:14
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
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 :-)
jb2718
Messages postés3Date d'inscriptionmardi 10 mai 2011StatutMembreDernière intervention 8 février 2012 8 juil. 2011 à 23:25
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.
developpeurista
Messages postés3Date d'inscriptionlundi 28 mars 2011StatutMembreDernière intervention 2 avril 2011 29 mars 2011 à 00:25
merci boucoup
Thunderbirds72
Messages postés1Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention28 décembre 2009 28 déc. 2009 à 11:46
Bonjour Pifou25,
Nickel ce code, fonctionne à merveille
Merci beaucoup
pifou25
Messages postés144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 décembre 2014 22 oct. 2009 à 20:47
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.
nkerjean
Messages postés1Date d'inscriptionmercredi 22 juin 2005StatutMembreDernière intervention22 octobre 2009 22 oct. 2009 à 07:32
pas de commentaire
YPMN
Messages postés98Date d'inscriptionvendredi 4 juin 2004StatutMembreDernière intervention20 août 2012 11 sept. 2009 à 21:50
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.
pifou25
Messages postés144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 décembre 2014 10 sept. 2009 à 21:01
je n'ai aucune idée à savoir si cette librairie permettait de recevoir du courrier... pour moi elle ne sert qu'à en envoyer!
YPMN
Messages postés98Date d'inscriptionvendredi 4 juin 2004StatutMembreDernière intervention20 août 2012 10 sept. 2009 à 18:10
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.
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.
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010 8 juin 2009 à 14:48
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.
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
?
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010 6 juin 2009 à 19:23
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
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'
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"
?
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010 5 juin 2009 à 12:56
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
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
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
pifou25
Messages postés144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 décembre 2014 25 sept. 2008 à 22:58
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!
katchi92
Messages postés3Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention20 juin 2012 25 sept. 2008 à 19:16
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
andalo
Messages postés102Date d'inscriptionlundi 23 avril 2007StatutMembreDernière intervention20 octobre 2012 23 mai 2008 à 15:33
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!
cs_guyvdv
Messages postés101Date d'inscriptionsamedi 16 mars 2002StatutMembreDernière intervention19 mai 20111 13 févr. 2008 à 15:42
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
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010 12 févr. 2008 à 15:09
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 = "
Hello World
" '__Les
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
cs_guyvdv
Messages postés101Date d'inscriptionsamedi 16 mars 2002StatutMembreDernière intervention19 mai 20111 12 févr. 2008 à 10:26
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
pifou25
Messages postés144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 décembre 2014 6 févr. 2008 à 18:17
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.
cs_fil57
Messages postés1Date d'inscriptionlundi 22 octobre 2007StatutMembreDernière intervention 6 février 2008 6 févr. 2008 à 10:44
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
cs_guyvdv
Messages postés101Date d'inscriptionsamedi 16 mars 2002StatutMembreDernière intervention19 mai 20111 5 févr. 2008 à 18:38
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
pifou25
Messages postés144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 décembre 2014 4 févr. 2008 à 13:41
En fait oui, on peut utiliser le format HTML dans le mail, il suffit de remplacer Textbody par:
objEmail.TextBody = "... msg HTML ..."
Apa 23
Messages postés10Date d'inscriptionsamedi 11 novembre 2000StatutMembreDernière intervention30 mars 2010 4 févr. 2008 à 10:48
Claire que la fonction est simple d'utilisation :)
21 févr. 2012 à 11:22
Merci à toi JB2718, grâce à toi tout marche.
Pour la signature j'ai trouvé une solution, en rajoutant un paramètre signature à la fonction qui me renvoie le chemin d'accès de l'image (car l'utilisateur choisi sa signature) :
Cette ligne pour récupérer juste le nom et l'extension de l'image :
NomSignature = Replace(pstrSignature, "C:\signatures", "")
strHTML = "<html>" & pstrCorps & "
</html>"
objEmail.HtmlBody = strHTML
objEmail.AddRelatedBodyPart pstrSignature, NomSignature, cdoRefTypeId
Ceci fonctionne malheureusement uniquement sur l'ordinateur.
En vérifiant l'email de chez moi, l'image n'apparait pas (petite croix).
Je pensais alors créer un fichier html affichant l'image, et l'utiliser dans le code comme ceci :
CreateMHTMLBody("file://" & CheminFichierHTML)
Mais j'arrive au mieux à aficher le code du fichier HTML dans le message mais pas le contenu..
Si quelqu'un a une idée.
17 févr. 2012 à 10:57
Je suis actuellement en stage et je me sers de cette fonction qui est parfaite en tout point, seulement j'aimerai savoir si il serait possible d'ajouter une signature au mail ?
Merci d'avance
8 févr. 2012 à 12:19
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
8 févr. 2012 à 09:09
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 ?
8 févr. 2012 à 08:59
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 :-)
9 juil. 2011 à 13:14
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 :-)
8 juil. 2011 à 23:25
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.
29 mars 2011 à 00:25
28 déc. 2009 à 11:46
Nickel ce code, fonctionne à merveille
Merci beaucoup
22 oct. 2009 à 20:47
Ypmn ... je te conseille d'installer un client genre thunderbird ou outlook express, ça fait tout ce que tu demande et plus encore.
22 oct. 2009 à 07:32
11 sept. 2009 à 21:50
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.
10 sept. 2009 à 21:01
10 sept. 2009 à 18:10
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.
8 juin 2009 à 15:10
Merci pour ton aide.
8 juin 2009 à 14:48
8 juin 2009 à 11:16
"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
?
6 juin 2009 à 19:23
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'
5 juin 2009 à 14:36
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"
?
5 juin 2009 à 12:56
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
5 juin 2009 à 12:08
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
5 juin 2009 à 10:53
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
25 sept. 2008 à 22:58
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!
25 sept. 2008 à 19:16
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
23 mai 2008 à 15:33
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!
13 févr. 2008 à 15:42
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
12 févr. 2008 à 15:09
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 = "
Hello World
" '__Les
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
12 févr. 2008 à 10:26
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
6 févr. 2008 à 18:17
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.
6 févr. 2008 à 10:44
Appréciable gain de temps
5 févr. 2008 à 18:38
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
4 févr. 2008 à 13:41
objEmail.TextBody = "... msg HTML ..."
4 févr. 2008 à 10:48
NB : peut-on utiliser le format html ?