Bannière

Menu

  Accueil
  Forum (Partagé)

PureBasic

  Présentation
  Tutoriaux
      Mode Console
      Mode Screen
      Mode Window
      Autres
  Téléchargements

3D Games-Creator

  Présentation
  Tutoriaux
  Téléchargements

Autres

  Téléchargements
  Partenaires
  Liens
  Contact
  Livre d'Or
  News Letter

SMTP (Simple Mail Transfert Protocol)

    Le protocole SMTP permet l'envoi d'e-mails. Le tutorial ci dessous sert permet l'envoi d'e-mails de MOINS de 1000 caractères (les champs "from:", "to:" et "Subject:" compris). Pour envoyer plus de 1000 caractères ou des pièces jointes, il faudrait utiliser la même procédure mais avec un encodage appelé MIME. (voir www.salemioche.com )


InitNetwork() ; Initialise les fonctions réseau.

*Buffer =
AllocateMemory(2000)
ClientID.l

; Collecte des informations.
Serveur.s = InputRequester("Adresse","Entrez l'adresse du serveur SMTP","smtp.tele2.fr")
Port.s =
InputRequester("Port","Entrez le port du serveur SMTP","25")
Email_Envoi.s =
InputRequester("Votre adresse","Entrez votre adresse e-mail","olimenez@wanadoo.fr")
Email_Destinataire.s =
InputRequester("Adresse du destinataire","Entrez l'adresse e-mail du destinataire.","olimenez@wanadoo.fr")
Nom.s =
InputRequester("Votre nom","Entrez votre nom","Olivier")

Eol.s =
Chr(13) +Chr(10) ; End of line : Fin de ligne, permet de faire un retour à la ligne.
Global Eol,*Buffer

Procedure Controle(Numero.w)
 
If Val(Left(PeekS(*Buffer),3)) <> Numero ; On vérifie si le serveur renvoi le code de validation et non le code d'erreur, Si ce n'est pas le bon code on renvoi 0 sinon 1. (Code pour chaque commande plus bas)
   
ProcedureReturn 0
 
Else
   
ProcedureReturn 1
 
EndIf
EndProcedure

Procedure Envoi_Reception(ConnectionID.l,Texte.s,Numero.w)
 
SendNetworkString(ConnectionID,Texte + Eol) ; On envoi la commande sur l'IDConnection suivie de Eol, ce qui fait comprendre au serveur que toute la commande est envoyée.
 
Repeat
   
FreeMemory(*Buffer) ; Cette ligne et celle du dessous servent à vider le buffer.
    *Buffer =
AllocateMemory(2000)
   
ReceiveNetworkData(ConnectionID,*Buffer,2000) ; On reçoit les réponses du serveur.
   
Debug PeekS(*Buffer) ; Fait voir ce que l'on reçoit dans le buffer.
 
Until NetworkClientEvent(ConnectionID) <> 2 ; On répète la boucle tant que toutes le données en attente ne sont pas reçues.
 
ProcedureReturn Controle(Numero)
EndProcedure

Procedure Quitter(ConnectionID.l)
 
Envoi_Reception(ConnectionID,"QUIT",221) ; On ne vérrifie pas la réponse car de toute façon on va couper la connection au serveur.
 
CloseNetworkConnection(ConnectionID) ; On coupe la connection.
 
End ; On quitte le programme
EndProcedure

; Connection au serveur avec l'adresse et le port rentrés.
Debug "Connection"
ClientID =
OpenNetworkConnection(Serveur,Val(Port))
If ClientID = 0 ; Si on ne peut pas se connecter au serveur
 
MessageRequester("Erreur","Ne peut pas se connecter.",#MB_ICONError) : End
Else ; Sinon on continue
; On reçoit ce que nous dit le serveur à la connection.
 
Repeat
   
FreeMemory(0) ; Cette ligne et celle du dessous servent à vider le buffer.
    *Buffer =
AllocateMemory(2000)
   
ReceiveNetworkData(ClientID,*Buffer,2000) ; On reçoit les réponses du serveur.
   
Debug PeekS(*Buffer) ; Fait voir ce que l'on reçoit dans le buffer.
 
Until NetworkClientEvent(ClientID) <> 2 ; On répète la boucle tant que toutes le données en attente ne sont pas reçues.


; Envoi de la première commande : "HELO", elle est obligatoire et doit être effectuée en premier.
; Le paramètre (ici "Test") est le nom de l'émetteur.
 
Debug "HELO"
 
If Envoi_Reception(ClientID,"HELO Test",250) = 0 ; Si la réponse serveur n'est pas égale à 250.
   
MessageRequester("Erreur","Ne peut pas envoyer la comande HELO." + Eol + Left(PeekS(*Buffer),3),#MB_ICONError) : Quitter(ClientID) ; On donne le code d'erreur renvoyé par le serveur et on quitte.
 
Else ; sinon on continue.
 
 
; Envoi de la commande : "MAIL FROM:", elle sert à faire connaitre l'adresse de la personne qui a envoyé au serveur.
; Le paramètre (ici c'est un InputRequester() ) est l'adresse de l'émetteur et doit être entre "<" et ">".
   
Debug "MAIL FROM:"
   
If Envoi_Reception(ClientID,"MAIL FROM: <" + Email_Envoi + ">",250) = 0 ; Si la réponse serveur n'est pas égale à 250.
     
MessageRequester("Erreur","Ne peut pas envoyer la commande MAIL FROM:" + Eol + Left(PeekS(*Buffer),3),#MB_ICONError) : Quitter(ClientID)
   
Else ; sinon on continue.
   
   
; Envoi de la commande : "RCPT TO:", elle sert à donner l'adresse e-mail du destinataire.
; Le paramètre (ici c'est un InputRequester() ) est l'adresse du destinataire et doit être entre "<" et ">".
     
Debug "RCPT TO:"
     
If Envoi_Reception(ClientID,"RCPT TO: <" + Email_Destinataire + ">",250) = 0 ; Si la réponse serveur n'est pas égale à 250.
       
MessageRequester("Erreur","Ne peut pas envoyer la commande RCPT TO:" + Eol + Left(PeekS(*Buffer),3),#MB_ICONError) : Quitter(ClientID)
     
Else ; sinon on continue.


; Envoi de la commande : "DATA", elle sert à indiquer au serveur que l'on envoi des e-mails.
       
Debug "DATA"
       
If Envoi_Reception(ClientID,"DATA",354) = 0 ; Si la réponse serveur n'est pas égale à 354.
         
MessageRequester("Erreur","Ne peut pas envoyer la commande DATA" + Eol + Left(PeekS(*Buffer),3),#MB_ICONError) : Quitter(ClientID)
       
Else ; sinon on continue.
   
   
; Envoi du message, il doit obligatoirement être teminé par Eol + "." + Eol pour que le serveur comprenne que le message est fini. Icic, le dernier Eol n'apparait pas car il est inclu dans Envoi_Reception()
; "From:" sert à faire savoir au logiciel de messagerie qui est l'envoyeur (pas obligatoire).
; "To:" sert à faire savoir au logiciel de messagerie qui est le recepteur (pas obligatoire).
; "Subject:" sert à faire savoir au logiciel de messagerie quel est l'objet (pas obligatoire).
         
Debug "RCPT TO:"
         
If Envoi_Reception(ClientID,"From: " + Chr(34) + Nom + Chr(34) + " <" + Email_Envoi + ">" + Eol + "To: <"+ Email_Destinataire + ">" + Eol + "Subject: " + InputRequester("Sujet","Entrez le sujet du message","") + Eol + InputRequester("Message","Entrez votre message","") + Eol + ".",250) = 0
           
MessageRequester("Erreur","Ne peut pas envoyer le message" + Eol + Left(PeekS(*Buffer),3),#MB_ICONError) : Quitter(ClientID)
         
Else ; sinon on continue.
           
Quitter(ClientID) ; On ferme la connection et on arrête le programme 
         
EndIf
       
EndIf
     
EndIf
   
EndIf
 
EndIf
EndIf

© Oliv.fr.fm - Design de PourTaPageWeb (Visitez le site)