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 n'ose pas poser une question, ça c'est une erreur !

ENVOYER UN E-MAIL AUTONOME (SANS MAPI) *-


Information sur la source

Catégorie :Réseau & Internet Classé sous : envoyer, mail, winsock Niveau : Initié Date de création : 28/07/2000 Date de mise à jour : 12/10/2001 00:00:00 Vu : 56 577

Note :
8,65 / 10 - par 136 personnes
8,65 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

Description

Bien le bonjour !
Voici un petit code pour envoyer des e-mails sans MAPI, la seule contrainte du code est que l'ordi doit être connecté, c'est tout.
Ce code est à mettre dans un module, la fonction Envoyer retourne TRUE si l'e-mail a été envoyé, FALSE si non. Vous devez passer en (premier) parametre un control Winsock.
Le dernier parametre est votre serveur mail de courrier sortant (SMTP), vous pouvez jeter un coup d'oeuil a la fin pour en avoir une liste de libres.
Le code ayant été très peu testé, il peut y avoir des erreurs, merci de les signaler, ou de les réparer sans grogner.
Bon dévellopement, et merci à VBCS.
 

Source

  • Option Explicit
  • Dim Sock As Winsock
  • Function Envoyer(Socket As Winsock, Nom_Exped As String, Mail_Exped As String, Nom_Destin As String, Mail_Destin As String, Objet As String, Optional Sujet As String = "", Optional Serveur As String = "Serveur Par Defaut") As Boolean
  • Envoyer = False
  • Set Sock = Socket
  • Sock.Close
  • Sock.RemotePort = 25
  • Sock.RemoteHost = Serveur
  • Dim T(6) As String
  • Dim mFrom As String
  • Dim mTo As String
  • Dim mMess As String
  • mFrom = Nom_Exped & " " & "<" & Mail_Exped & ">"
  • mTo = Nom_Destin & " " & "<" & Mail_Destin & ">"
  • mMess = ""
  • mMess = "FROM: " & mFrom & vbCrLf & "TO: " & mTo & vbCrLf
  • If Sujet <> "" Then mMess = mMess & "SUBJECT:" & Sujet & vbCrLf & VbCrLf
  • mMess = mMess & Objet & vbCrLf
  • T(0) = "HELO " & Serveur & vbCrLf
  • T(1) = "MAIL FROM: " & "<" & Mail_Exped & ">" & vbCrLf
  • T(2) = "RCPT TO: " & "<" & Mail_Destin & ">" & vbCrLf
  • T(3) = "DATA" & vbCrLf
  • T(4) = mMess
  • T(5) = VbCrLf & "." & vbCrLf
  • T(6) = "QUIT" & vbCrLf
  • Dim i As Integer, c As Integer
  • Sock.Close
  • Sock.Connect
  • For c = 1 To 10
  • For i = 1 To 5000
  • DoEvents
  • Next i
  • DoEvents
  • If Sock.State = sckConnected Then Exit For
  • Next c
  • If Sock.State <> sckConnected Then Envoyer = False: Exit Function
  • For i = 0 To 6
  • DoEvents
  • If Not SdTxt(T(i)) Then
  • Exit For
  • Err.Number = 1
  • End If
  • Next i
  • If Err.Number = 0 Then Envoyer = True
  • End Function
  • Function SdTxt(txt As String) As Boolean
  • SdTxt = False
  • Dim i As Integer
  • Dim tmp As String * 1
  • For i = 1 To Len(txt)
  • tmp = Mid$(txt, i, 1)
  • Sock.SendData tmp
  • Next i
  • If Err.Number = 0 Then SdTxt = True
  • End Function
Option Explicit
Dim Sock As Winsock

Function Envoyer(Socket As Winsock, Nom_Exped As String, Mail_Exped As String, Nom_Destin As String, Mail_Destin As String, Objet As String, Optional Sujet As String = "", Optional Serveur As String = "Serveur Par Defaut") As Boolean
Envoyer = False
Set Sock = Socket
Sock.Close
Sock.RemotePort = 25
Sock.RemoteHost = Serveur
Dim T(6) As String
Dim mFrom As String
Dim mTo As String
Dim mMess As String
mFrom = Nom_Exped & " " & "<" & Mail_Exped & ">"
mTo = Nom_Destin & " " & "<" & Mail_Destin & ">"
mMess = ""
mMess = "FROM: " & mFrom & vbCrLf & "TO: " & mTo & vbCrLf
If Sujet <> "" Then mMess = mMess & "SUBJECT:" & Sujet & vbCrLf & VbCrLf
mMess = mMess & Objet & vbCrLf
T(0) = "HELO " & Serveur & vbCrLf
T(1) = "MAIL FROM: " & "<" & Mail_Exped & ">" & vbCrLf
T(2) = "RCPT TO: " & "<" & Mail_Destin & ">" & vbCrLf
T(3) = "DATA" & vbCrLf
T(4) = mMess
T(5) = VbCrLf & "." & vbCrLf
T(6) = "QUIT" & vbCrLf
Dim i As Integer, c As Integer
Sock.Close
Sock.Connect
For c = 1 To 10
For i = 1 To 5000
DoEvents
Next i
DoEvents
If Sock.State = sckConnected Then Exit For
Next c
If Sock.State <> sckConnected Then Envoyer = False: Exit Function
For i = 0 To 6
DoEvents
If Not SdTxt(T(i)) Then
Exit For
Err.Number = 1
End If
Next i
If Err.Number = 0 Then Envoyer = True
End Function

Function SdTxt(txt As String) As Boolean
SdTxt = False
Dim i As Integer
Dim tmp As String * 1
For i = 1 To Len(txt)
tmp = Mid$(txt, i, 1)
Sock.SendData tmp
Next i
If Err.Number = 0 Then SdTxt = True
End Function
   

Conclusion

J'ai apporté 2 petites rectifications. j'espère que ça marchera mieux maintenant.
----------------------
Bon, on m'a demandé un exemple et des serveurs libres (difficiles a trouver d'ailleurs, alors si vous en avez, mailez-les moi svp...).
*Liste de serveurs:
- mail.mageos.com

*Exemple:
Vous mettez dans une feuille de nom "Form1" un controle WInsock de Nom "Sock1".
Propriétés du message:
Exepediteur: Nom: Jean | Mail: Jean@piu.com
Destinataire: Nom: Pierre | Mail: Pierre@yoa.com
Sujet: "Salut c'est Jean..."
Objet: "Ca va ? Je voulais te dire que ma grand-mére était championne de Karate-Do poids lourd, c'est tout... Ciao."
Serveur: "mail.mageos.com"

Donc vous allez envoyer ça comme ça :

Envoyer Form1.Sock1, "Jean", "Jean@piu.com", "Pierre", "Pierre@yoa.com", "Ca va ? Je voulais te dire que ma grand-mére était championne de Karate-Do poids lourd, c'est tout... Ciao.", "Salut c'est Jean...", "mail.mageos.com"
... et c'est tout ! Pas dur quand même !

 

Commentaires et avis

signaler à un administrateur
Commentaire de Hyo le 03/01/2002 22:48:42

Bitored des j'essaie avec plusieurs adresses, certaines me disent Vrai d'autres Faux ... mais ... après 10 minutes je ne reçois encore rien !

signaler à un administrateur
Commentaire de devilass le 07/01/2002 21:26:23

pour repondre a yves l'authentification c plutot pr les serveur pop avec lequel tu ne px que consulter ton courrier si tu as un compte chez celui ci (pr se connecter ex: ws.connect  "pop.freesbee.fr" , "110" , les commandes  user pseudo ; pass mot_de_passe ; retr n°_msg ...), ya pas que le smtp ! personnelement  g utilise le pop ds un pgm , pr qu'en 1 clic tu sais si ta des mails et apres eventuellement les lires ....

signaler à un administrateur
Commentaire de PtitJeoJeo le 05/02/2002 21:44:31

HELES GARS DESOLE DE DIRE CA MAIS C KOI UN WINSOCK ??? SI KELK1 PEU M AIDER LA DESSUS CA SERAIT COOL !!!! MERCI

signaler à un administrateur
Commentaire de Jordel le 14/02/2002 13:18:59

Bonjour a tous,

Tout d'abord meci pour ce code qui a l'air de fonctionner mais j'ai un probleme avec... le sock.state est toujours egal a 6 et le sckconnect a 7...et ce , quoique je fasse. Ce qui a pour but de ne pas envoyer les mails...

Je voudrai savoir si vous avez une sur ce probleme certes mineur, mais qui m'empeche d'avancer dans mon appli...

Merci d'avance.

Jordel

signaler à un administrateur
Commentaire de skaferadics le 31/03/2002 17:18:03

salut,

avec ce code l'email est envoyer,mais ca plante :(
???

skafer

signaler à un administrateur
Commentaire de pbrossier le 23/04/2002 11:24:40

Salut, en bidouillant un peu, cela fonctionne bien.
Mais pour un dev, un peu plus pro, je vous conseille de visiter l'URL suivante :
http://www.vbip.com/winsock/winsock_simple_sender.asp
C'est en Anglais, mais c'est super bien fait.
A+
et bon courage à tous !

signaler à un administrateur
Commentaire de revolt le 24/04/2002 11:04:22

Voici sans aucune garantie donc une liste de serveur SMTP dits "ouverts"
mail.duluthport.com (USA - Minneapolis)
209.50.164.102 (USA - Chicago)
graham.nettlink.net.pk (Pakistan)
mail.bbchs.k12.il.us (USA - Chicago)
mail.q-texte.net.ma (Maroc)

signaler à un administrateur
Commentaire de KractRiL le 04/05/2002 00:28:20

Pour envoyer un mail sans avoir besoin de serveur smtp acceptant le relying il suffit de vous connecter au serveur smtp du domaine de la personne qui doit recevoir le mail, et pour savoir son adresse : (seulement pour les utilisateur de windows NT ie : NT4 , 2K et XP )
allez sous dos et tapez :
nslookup
set q=mx
domain.com
vous aurez une ligne mail exchanger qui sera l'adresse d'un des serveur smtp du domaine, bien sur remplacer domain.com par le domaine de l email , par exemple pour missiou@hotmail.com vous remplacez domain.com par hotmail.com . voila j espere en avoir eclairer quelques uns et si vous n avez pas compris mailez moi.
(P.S : je repete que la commande "nslookup" n est possible que sous les windows NT)

signaler à un administrateur
Commentaire de anty le 30/05/2002 19:57:20

Bonjour à tous,
J'aimerais savoir comme bcp d'entre nous (enfin je pense...) comment envoyer une piece-jointe avec ce code...
Mais est-ce réellement possible en utilisant winsock???
Merci d'avance
et @++

signaler à un administrateur
Commentaire de Alan71 le 21/06/2002 11:37:44

ca fait beaucoup 2 commentaires tout ca !

signaler à un administrateur
Commentaire de Clem2k le 13/11/2002 09:08:12

On peut envoyer un mail facilement sans passer par un controle, ou par MAPI il suffit de se servir de la DLL CDONTS.dll (NT4) ou de son equivalent 2000 CDOSYS.dll ... Envoyez moi un message et je posterai des sources si besoin.

signaler à un administrateur
Commentaire de monceffnikov le 22/12/2002 10:09:50

bravo pour ce code génial. il fonctionne très bien. chapeau !!!

signaler à un administrateur
Commentaire de SHIVA le 08/04/2003 21:22:58

Ca marche !
Merci beaucoup !!!

signaler à un administrateur
Commentaire de dlpxlid le 27/05/2003 22:27:10

Salut,

Le code est génial. Ça marche super bien !!! Bravo.

Mais moi aussi, j'aimerais bien savoir comment faire pour envoyer une pièce jointe avec le mail. Malheureusement, il semblerait que l'auteur de cette source reste sans réponse quand on lui pose ce problème. Enfin, personne n'est parfait. C'est déjà très bien d'avoir fait cela.

signaler à un administrateur
Commentaire de Nargzul le 26/06/2003 13:11:59

dommage, ca marche pas chez moi, et j'arrive pas à comprendre pourquoi, ya aucun message d'erreure, je pige plus rien...

signaler à un administrateur
Commentaire de fox59 le 02/07/2003 10:53:19

'lut, toujours pas de serveur ouvert dispo ??! Thanks lot

signaler à un administrateur
Commentaire de happykiller le 04/08/2003 17:08:40

salut, j'aimme bp ton code aussi mais pour qu'il soit parfait qq'un pourait-il me donner les modif à apporter pour joindre une pièce jointe au mail :)

Merci à tous

++

signaler à un administrateur
Commentaire de jack le 05/08/2003 12:01:10 administrateur CS

Salut ta tousse
Bien que ne l'ayant pas essayé, il faut savoir que :
- Cette technique ne s'adresse quaux serveurs POP
- Que pour joindre une pièce jointe, il faut encoder le fichier en base 64, c'est à dire encoder avec un jeu de caractères très limité. Cet encodage existe et fonctionne, mais nécessite beaucoup de code (cherchez "Encode64 vb" sur Google).
Pour les anglophiles : http://www.aspalliance.com/wizard/A2OtpP2.asp

signaler à un administrateur
Commentaire de happykiller le 05/08/2003 12:23:13

pas faire autrement ? sut

Merci quant même

++

signaler à un administrateur
Commentaire de TheDjinn le 26/08/2003 14:52:07

lut ce code marche c'est sur mais
si je puis me permettre une critique les communications clients-serveur doivent se faire par un dialogue (dont l'idee des RFC)
(que ce soit du SMTP, du POP, du ESMTP, du TELNET, du SSH, etc.)
c'est a dire :

&lt;ENVOI D'UNE COMMANDE&gt;
&lt;ATTENTE DE RECEPTION DE LA REPONSE DU SERVEUR&gt;
&lt;ACTION SUIVANTE&gt;

l'action suivante pouvant etre l'annulation de l'envoi du mail si il y a eu une erreur.

et je trouve que ta facon d'attendre l'etablissement de la connection est... zarb ;] (et dangereuse pour peut qu'il y ait un gros lag de fou)

enfin bon en tout cas ton code est tres bien pour parfaitement comprendre la partie emission du protocole SMTP ;)

signaler à un administrateur
Commentaire de carpes le 11/09/2003 16:04:18

excellent ce code, marche bien, mais tu devrais préciser pour ceux qui ne connaissent pas comment on ajoute une winsock car ce n'est pas toujours mis par défaut (faut rajouter le composant si pas mis)

signaler à un administrateur
Commentaire de CanisLupus le 03/10/2003 17:20:19 administrateur CS

superbe ce code

signaler à un administrateur
Commentaire de olivierXIII le 13/10/2003 17:11:36

Bravo ca marche nickel avec le serveur smtp de mon provider.
(mageos marche pas, mais ce qui compte c'est le code, pas le serveur).
Si on veut envoyer des pièces jointes, bah on prend outlook ou autre et c'est tout.

10/10

signaler à un administrateur
Commentaire de cyberdetective06 le 27/10/2003 14:28:18

Cela m'avait l'air très interessant, mais pour l'instant, je n'arrive pas à le faire fonctionner .
Dès que ça marche, je le montre en exemple sur mon site !
cela demontre bien ce qu'un programme peut faire avec quelques lignes de codes.

signaler à un administrateur
Commentaire de axanet le 06/11/2003 00:58:14

il y a que des fonctions, comment placer le code dans le programme? j'ai crée une feuille, j'ai ajouté un controle winsock, dans lequel j'ai mis le code, mais ca ne marche!

merci de m'indiquer la façon d'utilser ce code.
adresse e-mail: macolombe1@yahoo.fr

signaler à un administrateur
Commentaire de VbMaster le 13/11/2003 18:02:05

Salut ce code est super meme s'il ne marche qu'avec le smtp de mon FAI mais bon au moins on n'est pas obliger de s'encombrer avec le MAPI. par contre il n'est pas entièrement anonyme (on peut trouver l'ip du pc ki l'a envoyé avec "source du message" sous outlook express) et le domaine de l'expéditeur doit être valide (par ex : quelqun@yahoo.com marche, mais quelqun@undomaineinexistant ne marche pas)

signaler à un administrateur
Commentaire de MuLLinS le 15/11/2003 23:03:30

Comment le faire marcher sous 2000 ?
je clique sur le bouton, g pas derreur, mais je recois aucun mails.
Pourriez-vous m'aider ?

signaler à un administrateur
Commentaire de Lewiss le 16/07/2004 17:24:41

Excellent !!!

Ce code est vraiment excellent.

J'ai beaucoup cherché avant de tomber sur quelque chose de fonctionnel, simple et efficace.

Merci beaucoup !

signaler à un administrateur
Commentaire de Scalpweb le 19/07/2004 13:28:00

Il est super ce code... Il manque juste un petit .zip

signaler à un administrateur
Commentaire de bobo93 le 23/07/2004 07:15:45

Hello everybody, everybody hello !

Un Grand Merci à Bitored pour ce code...simple et efficace à souhait...

A tchao.

signaler à un administrateur
Commentaire de daouf70 le 05/08/2004 15:50:26

il me paraît génial,mais il manque seulement le zip,
essayer de le faire stp...

a+

signaler à un administrateur
Commentaire de vivino le 12/11/2004 20:56:54

Genial, voila ce que me manquait pour remplacer Outlook qui me prend trop de ressources (il prends un temps du diable à démarrer :-(

Chez moi ça marche tip top et en plus ce code m'a donné l'idée d'aller consulter, avec notepad, un fichier .eml

En regardant l'estructure d'un fichier eml, on peut appprendre beaucoup sur les autres fonctionnalités d'un émail (pièces jointes, photos, etc)

Encore BRAVO pour Bitored qui mérite bien si l'on vote largement pour lui.

signaler à un administrateur
Commentaire de DEADisDEADisDEAD le 11/05/2005 07:59:26

Merci, mais il me faudrai un serveur SMTP :'(

signaler à un administrateur
Commentaire de Spacemarine le 20/06/2005 16:22:59

Salut
Merci pour cette source de très  bonne qualité
Je débute en programmation et j'essaye vainement depuis deux semaines de compléter ce programme:

je voudrais ajouter un accusé de réception pour etre prevenu quand le destinataire a recu le mail.

Est-il possible d'utiliser Disposition-Notification-to en vba?
quelquechose dans le genre : myMail.Headers.Add("Disposition-Notification-To",
"Expediteur@hotmail.com");
(http://www.csharpfr.com/code.aspx?ID=25907)
Ou alors utiliser "Return-Receipt-To" ??

Je suis vraiment bloqué... Si quelqu'un peut m'aider c vraiment trop cool et je pense que ca en interessera plusieurs

signaler à un administrateur
Commentaire de Design_sri le 10/01/2006 00:59:40

très bon code il marche nikel !! merci beaucoup !

signaler à un administrateur
Commentaire de wil82 le 20/06/2006 14:06:26

pour ma part je ne peut ajouter winsock parce qu'a chaque fois j'ai le meme message d'erreur: licence introuvable.
quelqu'un pourrait-il m'aidé?
j'utilise vba

signaler à un administrateur
Commentaire de frederios le 21/10/2006 06:25:20

Pour inserer un control winsock, super simple click de droite sur la barre a outils de vb(la ou tu choisie les controls a ajoute a tes forme ex.command button ou textbox), la tu dir ajouter un control ou add control en anglais(ou quelque chose qui ressemble a ca) la il y a une fenetre qui apparet avec un packet d'option, la tu cherche la rubrique "m" comme microsoft winsock tu choche la case a cote du microsoft winsock, tu click sur l'affirmative genre ok ou ajouter.

et la tu remarque que dans ta barre a outils il y a un nouvelle element qui est le controle winsock que tu ajoute a ta feuille.

Remarque: si tu avais jamais fais cette procedure, tu vas remarquer qu'il y a plein de control autre que le winsock. moi j'ai passer plein de nuit a les essayers tous et quelle plaisire que j'ai eu a tout les decouvrirent

bref j'espere que ca vous a aider

signaler à un administrateur
Commentaire de mp280272 le 27/08/2007 10:47:18

salut frederios,
j'ai fait se que indique mais je ne trouve pas le control je suis sous vb .net express 2005
c'est tu ou trouver ce controle pour le telecharger
merci de ton aide

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Envoyer un mail sans Winsock ni Outlook ! [ par Jonef ] Bonjour à tous !Voilà, en fait je souhaite faire un programme qui envois des e-mails, le problème c'est que Winsock ne marche pas donc pas possible d' Mail SMTP par WINSOCK [ par mcroteau ] J'ai présentement un problème. J'utilise Winsock pour envoyer des mails. Si j'envoie le mail par un serveur Exchange, la date d'envoie n'est pas la bo Envoyer simplement un mail avec winsock ! [ par Reelaxman ] Salut &#224; tous !J'ai trouver bon nombre de sources pour envoyer un mail avec Winsock, mais pas une seule qui ne fonctionne... A se tirer une balle comment envoyer des mail par winsock [ par dOsSpr0uTosS ] salut &#224; tous,je voudrais envoyer un mail par winsock donc je tape mailto:kurt_cobain_75@hotmail.com?Subject=test&amp;body=salutmais la il me dit Envoyer mail sans MAPI ni CDO [ par talking ] Bonjour tout le monde. Voil&#224; donc j'ai cherch&#233; sur tout le site, comment envoyer un mail avec Winsock, j'ai trouv&#233; des sources, mais le Envoi de Mail avec Winsock [ par Cjvg ] Bonjour à tous,Sous Microsoft XP et avec Visual Basic est ce que je peux:Question 1   Je souhaiterais savoir si avec Winsock je peux envoyer des mails Envoi Email [ par podzob56 ] Bonjour à tous!Je cherche à faire une macri qui reproduirait ceci:Ouverture "fichier.xls" puis"fichier"-&gt;"envoyer vers"-&gt; destinatairedonc norma recherche service web pour envoyer mail [ par djmic ] bonjour à tous,je suis à la recherche d'un service Web pour envoyer des mails. Est-ce que quelqu'un aurait un bon site qui propose des services web po Problème envoyer un mail via webmail [ par xounay ] Bonjour,Je cherche à envoyer un mail via webmail derriere serveur exchange.sachant qu'il y a une histoire de certificat+auth.Alors pour du smtp classi Envoi de mail en automatique Outlook/Exchange [ par BUZZ2K ] Bonjour,J'ai dev un logiciel sous Access. Je souhaiterais exporter des documents en PDF et les envoyer par mail.J'arrive a transformer mon etat en PDF


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,671 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.