ENVOYER UN MAIL (GÈRE LES FICHIERS JOINTS ET LE HTML) EN VB.NET (2002,2003,2005)

cs_Fornikator Messages postés 43 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 8 juin 2004 - 19 janv. 2003 à 01:12
Sly727 Messages postés 9 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 8 mai 2011 - 24 mars 2009 à 16:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5341-envoyer-un-mail-gere-les-fichiers-joints-et-le-html-en-vb-net-2002-2003-2005-via-system-net-dll-ou-system-web-dll

Sly727 Messages postés 9 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 8 mai 2011
24 mars 2009 à 16:34
J'ai trouvé tout seul. Il suffit de rajouter: .Bcc.Add(Mcc) après .Body = Mbody
Sly727 Messages postés 9 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 8 mai 2011
24 mars 2009 à 15:17
Bonjour,

j'ai testé cette source et elle fonctionne plutôt bien. Cependant il y a une chose qui ne fonctionne pas, c'est l'envoi de l'email en copie caché (Bcc), on peut ajouter une adresse email à qui on veut envoyer une copie caché mais dans la fonction, ce n'est pas traité. Donc finalement on rentre une adresse inutilement.

Est-ce que qqun peut me donner un coup de main pour faire fonctionner ça svp ?
timotep Messages postés 34 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 16 janvier 2008
12 nov. 2007 à 21:05
Bonjour,

Bon code, il m'a bien servi.
Cependant, j'ai une question. J'ai le problème suivant. Pendant l'envoi de l'email, la pièce jointe est en lecture seule. Mon problème, c'est que dans mon appli, même après que le message soit envoyé, le fichier joint reste en lecture seule (base de données). Y a t il des ressources à libérer? car je suppose que l'objet créé pour attacher le fichier n'est pas détruit et donc que la pièce reste en lecture seule, jusqu'à ce que l'appli se femre complètement.
thepoe Messages postés 30 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 1 juin 2011
21 nov. 2006 à 19:29
En effet, une fonction pour une classe, lol j'aurais pu faire mieux... Plus clair, j'ai dit ca parceque j'avais juste regardé le souce affiché plus haut qui n'est pas complet.
Désolé pour mon imprécision, et merci à tous pour la diffusion du code source, une des rares choses encore paragées sur la planete... Salutations
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
21 nov. 2006 à 18:48
mouais, plus clair... plus simpe peut etre, vu que tu as fais une classe contenant UNE fonction, mais explique moi en quoi ta source est plus clair.
La grosse difference, c'est que tu utilise pas la toute premiere version du framework (ce qui etait le cas ici) et donc que tu peux specifier le serveur smtp sans bidouilles. ^^
et si j'etais pas une grosse faignasse, je mettrais ma source à jour mais bon... :)
thepoe Messages postés 30 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 1 juin 2011
21 nov. 2006 à 01:32
Je viens de réussir a faire plus simple et plus clair. je travaille sur le html en ce moment.
Le lien vers la source : http://www.vbfrance.com/code.aspx?ID=40401

Salutations
hackoustik Messages postés 81 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 8 février 2007
30 avril 2006 à 09:06
Bjr, jai fais un pti prog pour envoyer mes mails, sa marche, mais la je lis et envois les lignes d'une page HTML et je pensai que mon compte Hotmail me les afficherai en tant que page HTML, alors quil m'affiche les lignes HTML, kelk1 sait si cest parceque jai oublier une option ?, yaurai pas une histoire avec Content-Type ?
ahmani24 Messages postés 39 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 14 novembre 2006
24 avril 2006 à 17:37
Super,je l'ai essayé est ça marche tres bien.
monstros2003 Messages postés 17 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 9 janvier 2009
21 déc. 2004 à 13:23
Presque 2 ans après...
Voici ce qu'il faut rajouter pour être authentifié sur un serveur non open relay tel que free, laposte, ect...
Avant l'envoi du mail, ajouter :
DotNetMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1")
DotNetMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "nom")
DotNetMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "mdp")
cs_fraboulet Messages postés 37 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 27 avril 2006
1 déc. 2003 à 20:01
Super, je ne sais pas encore si le code fonctionne!mais je compte l'essayer très vite!
RQ : N'HESITE PAS A PLACER TON SOURCE SI IL FONCTIONNE CAR IL EST DIFFICILE DE TROUVER UN CLIENT SMTP COMPLET!! (MAIL + FICHIER JOINT)
Merci encore!
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
1 déc. 2003 à 16:22
Il faut encoder en base64 ton fichier (algo style UUEncode) et ensuite ajouté le fichier encodé au mail (à la fin en séparant les parties MIME par des balises BOUNDARY).

C'est pas très compliqué à joindre un fichier à un mail en respectant MIME...


Private Function AddHeaderFileSMTP() As String
Dim i As Byte
Const Boundary As String = "TonBoundary"

AddHeaderFileSMTP = "MIME-Version: 1.0" + vbCrLf + _
"Content-Type: multipart/mixed; " + _
"boundary=" + """" + "----=_" + Boundary + """" + vbCrLf + _
"X-Mailer: VB jock" + vbCrLf + vbCrLf + _
"This is a multi-part message in MIME format." + vbCrLf + vbCrLf

AddHeaderFileSMTP = AddHeaderFileSMTP + _
"------=_" + Boundary + vbCrLf + _
"Content-Type: text/plain; charset=" + """" + "iso-8859-1" + """" + vbCrLf + _
"Content-Transfer-Encoding: 8bit" + vbCrLf + vbCrLf


'Contenu du mail
AddHeaderFileSMTP = AddHeaderFileSMTP + _
strBody + vbCrLf + vbCr + vbCrLf + vbCrLf

' Joint un ou plusieurs fichiers au mail, dont le Path de chaque fichier est contenu dans la liste 'tabFileAttach' (tableau de String)

If nbFileAttach = 0 Then
Exit Function
End If

i = 0
Do While i < nbFileAttach

strFile = OpenFileAPI(tabFileAttach(i).Path)

If strFile = "" Then
'Erreur d'ouverture du fichier à joindre au mail
strErreurSMTP = "Erreur d'ouverture du fichier :" + vbCrLf + """" + tabFileAttach(i).Path + """."
DoEvents
Exit Function
End If

strFileNameSend = tabFileAttach(i).name

AddHeaderFileSMTP = AddHeaderFileSMTP + _
"------=_" + Boundary + vbCrLf + _
"Content-Type: application/octet-stream;" + vbCrLf + _
" name=" + """" + strFileNameSend + """" + vbCrLf + _
"Content-Transfer-Encoding: 7bit" + vbCrLf + _
"Content-Disposition: attachment;" + vbCrLf + _
" filename=" + """" + strFileNameSend + """" + vbCrLf + vbCrLf

AddHeaderFileSMTP = AddHeaderFileSMTP + _
UUEncode(strFile) + vbCrLf

i = i + 1
Loop

AddHeaderFileSMTP = AddHeaderFileSMTP + _
"------=_" + Boundary + vbCrLf

End Function

Avec cette fonction, tu peux joindre autant de fichier que tu veux et envoyer le flux au serveur SMTP (dans l'étape de fin DATA du protocole).

Je vais me motiver pour mettre ma source sur le site, ce sera plus simple...
cs_fraboulet Messages postés 37 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 27 avril 2006
1 déc. 2003 à 14:18
Déja fait...C'est de ce site que je me suis inspiré pour faire mon client...mais j'ai tout de même des prbs!
Ton prog en question utilise le MIME? Si oui, n'hesite pas à me le mailer (si tu l'as encore!)sinon t'utilises quoi pour attacher sans utiliser MAPI??
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
1 déc. 2003 à 14:10
le MIME, c'est un vrai casse tête...
;)
pour faire un bon client Mail en VB, il faut bien comrpendre MIME. Il y a une assez bonne description sur ce site : www.salemioche.com
Ou carrément se plonger dans la RFC.
cs_fraboulet Messages postés 37 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 27 avril 2006
1 déc. 2003 à 13:37
OK, l'idée est bonne, mais il est dommage qu'elle nécessite un serveur open relay!
jockos, je suis très intéressé par ton prog avec winsock, j'ai essayé avec VB6 et je ne parviens pas à faire fonctionner le MIME!
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
8 févr. 2003 à 01:36
si tu avais lu entierement mon post, tu aurais lu que cette erreur se genere lorsque le server smtp utilisé n'est pas free relay... pour une liste de serveur free relay...contactes moi...
cbjp85 Messages postés 34 Date d'inscription vendredi 22 novembre 2002 Statut Membre Dernière intervention 6 avril 2003
7 févr. 2003 à 23:03
Le code source génère une erreur : Impossible d'acceder à l'objet 'CDO.Message'.
Je suis débutant en VB et je ne sais pas ce que je peux faire. Pouvez vous m'aider svp !!??
cs_guyvdv Messages postés 101 Date d'inscription samedi 16 mars 2002 Statut Membre Dernière intervention 19 mai 2011 1
20 janv. 2003 à 18:30
Biensur Jockos, metre sur le site est une bonne idee.
Je veux essayer d'en faire un programme pour envoie d'un mailling a mais clients.
GUY van der Velden
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
20 janv. 2003 à 14:55
Moi, j'ai développé un code qui marche juste avec Winsock...(pas besoin de passer par Outlook).
J'envoie les données avec le protocol SMTP à un serveur quelconque...(smtp.wanadoo.fr par exemple).

On peut envoyer plusieurs fichiers joints, à plusieurs destinataires...
Si ça interresse des personnes, je le mettrais sur ce site, car je ne suis pas sûr qu'il y ait dejà des sources qui fasse cela...
badconex Messages postés 5 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 23 janvier 2003
19 janv. 2003 à 20:19
Ah merci, justement
j'essayait d'utiliser cet dll ya quelque jour mé jy suis pas arrivé, c sympa

vive vb.net

10/10
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
19 janv. 2003 à 14:27
non smtp.free.fr n'est pas open relay... voila une toute petite liste de serveur dont c'est le cas (je vais pas non plus pousser au spam, si vous en voulez plus, mailez moi ou laisser un msg ici) vu qu'apparement c'est de moins en moins courant (moi mon provider le fait, mais je le donne pas ^^ ) :

ns2.heartlandexpress.com
pool-129-44-35-231.ny325.east.verizon.net
194.204.205.15
194.206.228.97
200.27.165.233

apres tous sont + ou - rapides... je suis en train de creer une liste a mettre a jour de serveurs open relay, mailez moi si cela vous interesse.

Et pour ce qui est de la question de ronanry, je vais essayer de voir ca... mais au pire il reste les sockets.
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
19 janv. 2003 à 12:31
j'arrive pas à le faire marcher. Eske ça fonctionne avec smtp.free.fr ?
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
19 janv. 2003 à 10:06
et comment peut on faire si on est oblige d'avoir un serveur loggue???
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
19 janv. 2003 à 04:01
c'est pas parcque tu sais pas lancer une source et trouver un server en open relay qu'il faudrait sous-noter le code... ca ne merite pas vraiment de note, c'est surtout la à titre d'exemple...
cs_Fornikator Messages postés 43 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 8 juin 2004
19 janv. 2003 à 01:12
Jarrive pas a le faire fonctionner sinon 6/10
Rejoignez-nous