begin process at 2008 07 05 05:50:40
1 205 051 membres
37 nouveaux aujourd'hui
14 118 membres club

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 !

IDHTTP , IDPOP3 ,IDSMTP EN GRANDE PARTIE EXPLIQUÉE


Information sur la source

Catégorie :Tutoriaux Niveau : Débutant Date de création : 13/03/2003 Date de mise à jour : 16/03/2003 18:42:10 Vu : 20 391

Note :
10 / 10 - par 8 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Vous pouvez le trouver sur mon site

http://www.remixtech.com
dans la rubrique tutorial

Sinon ci dessous le tutorial

Oups le tutorial à un prob , il remplace les , ' en  ?
Pour pas avoir le prob telechargez le ...

Source

  • IDHTTP , IDSMTP , IDPOP3 Avec Remixg@me
  • I Introduction
  • Nous étudierons, les composants IDHTTP , IDPOP3 et IDSMTP qui sont des composants très simple à utiliser,
  • et très très performant ...
  • De plus aucun tutorial n'est disponible actuellement sur le net.
  • C'est pourquoi, voici un tutorial très très théorique, aucun exemple du type cliquez ici ne sera mentionné, nous étudierons les fonctions de bases ...
  • II Questions
  • 1. Pourquoi utiliser les composant INDY ?
  • 2. Ou trouver ces composants ?
  • 3. Ou trouver des exemples ?
  • 4. Ou trouver le code source ?
  • 5. Ou trouver le fichier d'aide ?
  • 1. Pour développer des applications fiables et puissantes liées au réseau de plus Indy livre son Code Source, il est libre de bugs, et est plus stable ...
  • 2. Dans Delphi 7 et il me semble Delphi 6, à vérifier ...
  • 3.http://www.nevrona.com/indy/demodownloads/I9D6_Demos_24Nov02.zip
  • 4.http://www.nevrona.com/indy/downloads/IndyWin32_9_00_11_Src.zip
  • 5.http://www.nevrona.com/indy/downloads/Indy-9-0-Help-WinHelp.zip
  • III Idhttp et Idpop3
  • 1. IDHTTP
  • Idhttp se trouve dans les composants Indy -> Client, c'est un client HTTP, il permet d'établir une connexion avec un serveur (sécurisé ou pas),
  • De télécharger des données, c'est un composant idéal si vous voulez créer une application de type Internet http (Web browser, Aspirateur de site Web, MAJ de logiciel,
  • Vérification de clé), de plus je crois qu'il est possible d'envoyer des entêtes permettant de transmettre des paramètres de type Input Box (Formulaire) mais je ne connais pas toute les fonctions de ce composant qui est puissant ...
  • 2. IDPOP3
  • IDPOP3 se trouve comme le précédant dans la rubrique Indy-> Client, c'est un client POP3, il à toute les fonctions nécessaires à créer un logiciel surpuissant du type Outlook express, pour vous dire, nous aborderons ici les principes les plus simples, nombre de mails, récupération des entêtes, suppression des messages, récupération des messages entiers ...
  • 4. IDantifreeze
  • Les composants INDY étant des composants bloquant il est conseillé d?utiliser ce composant pour éviter de figer l?application pendant le déroulement de l?application ? Vous le trouverez dans INDY -> divers
  • IV Idhttp
  • 1 Téléchargement simple et bête d?un fichier
  • 2 Explication des fonctions
  • Pour se connecter :
  • Obtenir la taille d?un fichier :
  • Télécharger un fichier ou une partie :
  • Authentification basic de type HTACCESS :
  • 4.Conclusion
  • 1 Téléchargement simple et bête d?un fichier
  • Pour télécharger un fichier rapidement sans complication voici un morceau de code ?
  • procedure TForm1.Button1Click(Sender: TObject);
  • var
  • F: TFileStream;
  • begin
  • try
  • {On crée un fichier c:\ fichier.exe}
  • F := TFileStream.Create(?c:\fichier.exe?, fmCreate);
  • {On récupère un fichier sur internet et on met tout dans F soit c:\ fichier.exe}
  • IdHTTP1.get(?www.domaine.com/fichier.exe?,F);
  • Finally
  • {Enfin on libère F}
  • F.Free;
  • end;
  • end;
  • 2 Explication des fonctions
  • Pour se connecter :
  • idhttp1.Host := '?www.free.fr'; //1
  • idhttp1.port := 80 ; //2
  • idhttp1.Connect(-1); //3
  • 1 -> Entrez ici l?hôte
  • 2 -> Entrez ici le port
  • 3 -> Demandez la connection avec comme argument -1 pour ( pas de timeout )
  • Si vous mettez 100 alors une erreur timeout sera généré après 100 ms d?attente
  • Obtenir la taille d?un fichier :
  • IdHTTP1.Head('/im/mast0.gif'); // 1
  • Taille := IdHTTP1.Response.ContentLength; // 2
  • 1 -> Ici on récupère l?en tête du fichier /im/mast0.gif donc http://www.free.fr/im/mast0.gif
  • 2 -> On extrait la taille du fichier de la réponse de Head et on la place dans la variable taille qui doit être de type INT
  • Après cette action le client se déconnecte du serveur
  • Télécharger un fichier ou une partie :
  • idhttp1.Request.ContentRangeStart := 10; //1
  • idhttp1.Request.ContentRangeEnd := 100; //2
  • RecuSTR := idhttp1.Get('/index.html'); //3
  • 1 -> On demande de télécharger à partir de ContentRangeStart , ici on commence par télécharger le 10 ème bit
  • 2 -> On demande de télécharger jusqu? à ContentRangeEnd , ici on télécharge jusqu'à 100
  • 3 -> On va chercher la page http://www.free.fr /index.html et on place ce qui est recu dans la variable STRING RecuSTR
  • Après cette action le client se déconnecte du serveur
  • Authentification basic de type HTACCESS :
  • idhttp1.Request.Username:=?Username?; //1
  • idhttp1.Request.password:=?Password?; //2
  • idhttp1.Request.BasicAuthentication:=true; //3
  • 1 -> Ici on place l?username , ATTENTION : ce bout de code doit être placé avant la connection ou la demande de fichier ?
  • 2 -> Ici le password ?
  • 3 -> On indique qu?on veux une authentification Simple avec cette fonction
  • 4.Conclusion
  • Avec cela vous pouvez faire un client http qui suporte le resuming , l?authentification , et bien d?autre chose , j?espere que ce tutorial comblera un peu le trou noir sur INDY , car y?a vraiment pas grand-chose sur lui ?
  • V IDPOP3
  • 1 ) Connection à un serveur POP3
  • 2 ) Nombre de mail
  • 3 Récupération des Headers
  • 4 Suppression d?un message
  • 5 Récupérer un message
  • 6 Informations basics d?un message récupéré
  • 7 Plus Dur Récupération du Texte et des fichiers joints ?
  • Etudions le TIDText
  • Etudions le TIDAttachement
  • 8 Conclusion
  • 1 ) Connection à un serveur POP3
  • idpop31.Host := 'VotrePOP'; //1
  • idpop31.Username := 'VOTREUsername'; //2
  • idpop31.Password := 'VotrePASS'; //3
  • idpop31.Connect(-1); //4
  • 1 -> Indiquez ici votre serveur Pop3
  • 2 -> Votre user
  • 3 -> Votre Pass
  • 4-> Demandez la connection avec comme argument -1 pour ( pas de timeout )
  • Si vous mettez 100 alors une erreur timeout sera généré après 100 ms d?attente
  • 2 ) Nombre de mail
  • nbrmail := idpop31.CheckMessages;
  • Cette fonction va chercher le nombre de message sur le compte POP3 ou nous nous sommes connectés , la fonction renvoit le nombre de message en Integer ?
  • 3 Récupération des Headers
  • Pour utiliser cette fonction il vous faut placer un IDMessage (Dans Indy Divers ) , ici nous l?appellerons MSG
  • idpop31.RetrieveHeader(MAIL,Msg); //1 //2 //3
  • 1 -> MAIL -> entier donnant le numéro du mail
  • 2 -> MSG -> nom de votre Idmessage
  • 3 -> Dans cette fonction on place les headers de MAIL dans le Idmessage MSG
  • SUJET := (Msg.Subject) ; //1
  • SENDER := (Msg.From.Text) ; //2
  • DATE := (DateToStr(Msg.Date)) ; //3
  • TAILLE := IntToStr(idPOP31.RetrieveMsgSize(MAIL))); //4 //5
  • 1 -> On place le sujet du message dans la variable sujet
  • 2 -> Pareil mais avec , l?envoyeur du mail
  • 3 -> Pareil mais avec la date
  • 4 -> Ici on récupère la taille du mail avec la fonction RetrieveMsgSize
  • 5 -> MAIL -> Numéro e mail en cour en INTEGER
  • 4 Suppression d?un message
  • idpop31.delete(MAIL); //1
  • 1 -> On utilise la fonction delete pour supprimer MAIL -> Numéro du mail à supprimer
  • 5 Récupérer un message
  • idpop31.Retrieve(MAIL, Msg); //1
  • 1 -> le message est récupéré , est stocké dans le IDMessage MSG , il peut contenir , text , images , Fichiers
  • 6 Informations basics d?un message récupéré
  • EnvoiePar := Msg.From.Text; //1
  • ReceptionDeEmail := Msg.Recipients.EmailAddresses; //2
  • CC := Msg.CCList.EMailAddresses; //3
  • Sujet := Msg.Subject; //4
  • Date := FormatDateTime('dd mmm yyyy hh:mm:ss', Msg.Date); //5
  • Receipt := Msg.ReceiptRecipient.Text; //6
  • Organisation := Msg.Organization; //7
  • Priority:= IntToStr(Ord(Msg.Priority) + 1); //8
  • 1 -> C?est l?adresse de celui qui a envoyé le mail
  • 2 -> C?est le destinataire
  • 3 -> CC
  • 4 -> Le sujet
  • 5 -> la date remarqué le FORMATDATETIME
  • 6-> Receipt ( je sais pas à quoi ca sert )
  • 7 -> Organisation
  • 8 -> C?est la priorité
  • 7 Plus Dur Récupération du Texte et des fichiers joints ?
  • J?ai passé un bon bout de temps avant de comprendre le fonctionnement ( 1 tite Heure )
  • Mais maintenant tout va bien j?ai tout compris ?
  • Et je vais essayer de vous faire part de mes connaissances .
  • La base TIDAttachement -> veut dire Fichier Joint
  • La base TIDText -> veut dire Texte Joint
  • Etudions le TIDText
  • if Msg.MessageParts.Items[PARTIEMESSAGE] is TIdText then //1
  • begin Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[PARTIEMESSAGE]).Body); //2
  • end
  • 1 -> Le message est composé de plusieurs parties bien distinctes , PARTIEMESSAGE est la partie désiré du message .Donc Si PARTIEMESSAGE est un TIDTEXT alors on l?affiche
  • Voici la fonction qui permet de trouver le nombre de partie
  • Msg.MessageParts.Count // C?est la fonction pour trouver le nombre de partie
  • 2 -> On place le Body de MSG dans Memo1 à l?aide de cette fonction
  • Etudions le TIDAttachement
  • if (Msg.MessageParts.Items[PARTIEMESSAGE] is TIdAttachment) then //1
  • begin
  • NOM := (TIdAttachment(Msg.MessageParts.Items[PARTIEMESSAGE]).Filename); //2
  • CONTENT : = (TIdAttachment(Msg.MessageParts.Items[PARTIEMESSAGE]).ContentType); //3
  • TIdAttachment(Msg.MessageParts.Items[intIndex]).SaveToFile('c:\Fichiers.txt') ; //4
  • end
  • 1 -> On vérifie si PARTIEMESSAGE est un attachement
  • 2 -> On prend le Nom du fichier est on le transmet à la variable NOM
  • 3 -> On prend le type de fichier Plain/text Jpeg/image enfin c?est trucs la quoi , et on le mais dans CONTENT
  • 4 -> On place le Tidattachment dans un fichier ici c:\fichiers.txt
  • Ca parait simple mais pour le chercher c?est plus compliqué ?
  • 8 Conclusion
  • Vous avez toute les fonctions necessaires pour faire un SUPER client mail ;-) , ici je n?ai pas décrit les messages de sortie , mais si la fonction est executé correctement alors elle à des chances de renvoyer la valeur TRUE , après on attaque le SMTP ?
  • VI IDSMTP
  • 1.Se connecter Mode LOGIN Mode NONE
  • 2.Se connecter
  • 3.Préparer un MSG
  • 4 Envoyer le mail
  • 5 Conclusion
  • Dans cette partie nous décrirons le composant IDSMTP , juste en envoyant un message , pour l?utiliser il faut le composant TIDMessage qui sera ici appelé MSG
  • 1.Se connecter Mode LOGIN Mode NONE
  • SMTP.AuthenticationType := atNone; //1
  • SMTP.AuthenticationType := atLogin; //2
  • 1 -> Sans Authentification
  • 2 -> Avec Authentification
  • 2.Se connecter
  • SMTP.Username := Username;
  • SMTP.Password := bentonpasse;
  • SMTP.Host := Serveur;
  • SMTP.Port :=port;
  • SMTP.Connect(-1);//1
  • 1 -> j?ai passé l?explication sur les ports est le login sinon mon cour ferait 20 000 pages ( même pas exagéré ;-) )
  • Donc comme pour les autres le -1 de connect signifie pas de timeout , si celui-ci est réglé à 1000
  • Alors si le serveur ne répond pas avant 1000 ms le programme génere une erreur attente dépassé ?
  • 3.Préparer un MSG
  • with MSG do //1
  • begin
  • Body.Assign(Memo1.Lines); //2
  • From.Text := Tonmail; //3
  • Recipients.EMailAddresses := DESTINATAIRE; //4
  • Subject := SUJET; //5
  • Priority := TIdMessagePriority(2); //6
  • CCList.EMailAddresses := CC; //7
  • BccList.EMailAddresses := BB; //8
  • Sender.Text := Envoyeur ; //9
  • ExtraHeaders.Assign(?Un truc?); //10
  • End
  • TIdAttachment.Create(MSG.MessageParts, ?c:\fichier.exe?); //11
  • 1 -> On utilise les fonctions suivantes avec MSG
  • 2 -> C?est le texte
  • 3 -> C?est celui qui envoit
  • 4 -> C?est le destinataire
  • 5 -> c?est le sujet
  • 6 -> Priorité
  • 7 -> CC ???
  • 8 -> BB ??? Je sais qu?il y?a ces deux la dans outlook donc j?ai mis ..
  • 9 -> adresse de celui qui envoie
  • 10 -> C?est les headers à rajouté , Exemple pour le HTML
  • 11 -> rajouter un fichier dans Tidattachment ici le fichier ?c:\fichier.exe?
  • 4 Envoyer le mail
  • SMTP.Send(Msg);
  • No Coment ;-)
  • 5 Conclusion
  • Maintenant vous savez envoyer un mail ?
  • VII.Evenements
  • J?ai mis à part les évenements car il se ressemble beaucoup dans INDY , donc les choses expliquées ci dessous pour IDHTTP sont valables pour IDSMTP et IDPOP3
  • Les On Work Valable pour tout les composants INDY ;-)
  • procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;const AWorkCountMax: Integer);
  • begin
  • if AWorkMode = wmRead then //1
  • begin
  • ProgressBar1.Max := AWorkCountMax ; //2
  • ProgressBar1.Position := 0 ; //3
  • end;
  • end;
  • procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);
  • begin
  • if AWorkMode = wmRead then
  • begin
  • ProgressBar1.Position := AWorkCount ; //4
  • Label1.Caption := IntToStr(AWorkCount) + 'Bytes de :' + inttostr(ProgressBar1.Max) ; //5
  • end;
  • end;
  • procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  • begin
  • if AWorkMode = wmRead then
  • Label1.Caption := 'Fin?; //6
  • end;
  • TForm1.IdHTTP1WorkBegin -> Début de travaille du composant
  • TForm1.IdHTTP1Work -> Travaille en cour
  • TForm1.IdHTTP1WorkEnd -> Fin du travail
  • 1 -> Si le mode de aworkmode est lecture alors
  • 2 -> On aligne la progress bar ( le max ) avec le total de boulot ?
  • 3 -> On règle la position de la progress bar à 0
  • 4 -> On aligne la progress bar avec AWORKCOUNT qui nous renvoit le travaille éfféctué
  • 5 -> On présente l?avancement
  • 6 -> On indique la fin du boulot ...
  • Authentification FAILED ;?)
  • procedure TForm1.IdHTTP1Authorization(Sender: TObject;
  • Authentication: TIdAuthentication; var Handled: Boolean);
  • begin
  • showmessage('ERROR Non authentifié');
  • end;
  • Il nous renvoie ici si il y?a un problème d?authentification
  • Connection et déconnection :
  • procedure TForm1.IdHTTP1Connected(Sender: TObject);
  • begin
  • //1
  • end;
  • procedure TForm1.IdHTTP1Disconnected(Sender: TObject);
  • begin
  • end;
  • //2
  • end.
  • Classique ;-)
  • 1 -> si il y?a connection il nous renvoi ici
  • 2 -> si il y?a deconnection il nous renvoi ici
  • Mon préféré le STATUS
  • procedure TForm1.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
  • const AStatusText: String);
  • begin
  • edit1.text:=astatustext; //1
  • end;
  • 1 -> on place dans Edit1.text le status ?
  • VIII Conclusion
  • J?espere que ce tutorial vous aura bien servie , moi en tout cas il me servira tout le temps de pense bête , j?espère d?ici un pti bout de temps , pouvoir sortir un tutorial toujours sur INDY , mais cette fois sur FTPClient , FTPServeur , TCP IP Client , TCP IP Serveur , Le multithreading
  • Si vous pensez que c?est une bonne idée faîte le moi savoir webmaster@remixtech.com
  • Vous pouvez aller faire un tour sur mon site pour l?instant que des softs en VB , mais bientôt des gros softs en delphi ?
  • Bye
  • http://www.remixtech.com
IDHTTP , IDSMTP , IDPOP3 Avec Remixg@me


I Introduction 
 
Nous étudierons, les composants IDHTTP , IDPOP3 et IDSMTP qui sont des composants très simple à utiliser,
et très très performant ...
De plus aucun tutorial n'est disponible actuellement sur le net.
C'est pourquoi, voici un tutorial très très théorique, aucun exemple du type cliquez ici ne sera mentionné, nous étudierons les fonctions de bases ...


II Questions

	1. Pourquoi utiliser les composant INDY ?
	2. Ou trouver ces composants ?
	3. Ou trouver des exemples ?
	4. Ou trouver le code source ?
	5. Ou trouver le fichier d'aide ?

	1. Pour développer des applications fiables et puissantes liées au réseau de plus Indy livre son Code Source, il est libre de bugs, et est plus stable ...
	2. Dans Delphi 7 et il me semble Delphi 6, à vérifier ...
	3.http://www.nevrona.com/indy/demodownloads/I9D6_Demos_24Nov02.zip
	4.http://www.nevrona.com/indy/downloads/IndyWin32_9_00_11_Src.zip
	5.http://www.nevrona.com/indy/downloads/Indy-9-0-Help-WinHelp.zip

III Idhttp et Idpop3

	1. IDHTTP
		Idhttp se trouve dans les composants Indy -> Client, c'est un client HTTP, il permet d'établir une connexion avec un serveur (sécurisé ou pas), 
De télécharger des données, c'est un composant idéal si vous voulez créer une application de type Internet http (Web browser, Aspirateur de site Web, MAJ de logiciel, 
Vérification de clé), de plus je crois qu'il est possible d'envoyer des entêtes permettant de transmettre des paramètres de type Input Box (Formulaire) mais je ne connais pas toute les fonctions de ce composant qui est puissant ...

	2. IDPOP3
		IDPOP3 se trouve comme le précédant dans la rubrique Indy-> Client, c'est un client POP3, il à toute les fonctions nécessaires à créer un logiciel surpuissant du type Outlook express, pour vous dire, nous aborderons ici les principes les plus simples, nombre de mails, récupération des entêtes, suppression des messages, récupération des messages entiers ...


	4. IDantifreeze
		Les composants INDY étant des composants bloquant il est conseillé d?utiliser ce composant pour éviter de figer l?application pendant le déroulement de l?application ? Vous le trouverez dans INDY -> divers

 






IV Idhttp

1 Téléchargement simple et bête d?un fichier
2 Explication des fonctions
	Pour se connecter :
	Obtenir la taille d?un fichier :
	Télécharger un fichier ou une partie :
	Authentification basic de type HTACCESS :
4.Conclusion		


	1 Téléchargement simple et bête d?un fichier

Pour télécharger un fichier rapidement sans complication voici un morceau de code ?

 procedure TForm1.Button1Click(Sender: TObject);
var
 F: TFileStream;
begin
 try

{On crée un fichier c:\ fichier.exe}

       F := TFileStream.Create(?c:\fichier.exe?, fmCreate);
    
{On récupère un fichier sur internet et on met tout dans F soit c:\ fichier.exe}

      IdHTTP1.get(?www.domaine.com/fichier.exe?,F);

 Finally
{Enfin on libère F}
   F.Free;
 end;
end;

	2 Explication des fonctions 

Pour se connecter :

idhttp1.Host := '?www.free.fr'; //1
idhttp1.port := 80 ; //2
idhttp1.Connect(-1); //3

1 -> Entrez ici l?hôte 
2 -> Entrez ici le port
3 -> Demandez la connection avec comme argument -1 pour ( pas de timeout ) 
Si vous mettez 100 alors une erreur timeout sera généré après 100 ms d?attente 

Obtenir la taille d?un fichier :

IdHTTP1.Head('/im/mast0.gif'); // 1 
Taille := IdHTTP1.Response.ContentLength; // 2

1 -> Ici on récupère l?en tête du fichier /im/mast0.gif donc http://www.free.fr/im/mast0.gif 
2 -> On extrait la taille du fichier de la réponse de Head et on la place dans la variable taille qui doit être de type INT

Après cette action le client se déconnecte du serveur

Télécharger un fichier ou une partie :

idhttp1.Request.ContentRangeStart := 10; //1
idhttp1.Request.ContentRangeEnd := 100; //2
RecuSTR := idhttp1.Get('/index.html'); //3

1 -> On demande de télécharger à partir de ContentRangeStart , ici on commence par télécharger le 10 ème bit
2 -> On demande de télécharger jusqu? à ContentRangeEnd , ici on télécharge jusqu'à 100
3 -> On va chercher la page http://www.free.fr /index.html et on place ce qui est recu dans la variable STRING RecuSTR

Après cette action le client se déconnecte du serveur

Authentification basic de type HTACCESS :

idhttp1.Request.Username:=?Username?; //1
idhttp1.Request.password:=?Password?; //2
idhttp1.Request.BasicAuthentication:=true; //3

1 -> Ici on place l?username , ATTENTION : ce bout de code doit être placé avant la connection ou la demande de fichier ?
2 -> Ici le password ?
3 -> On indique qu?on veux une authentification Simple avec cette fonction 

	

	4.Conclusion 

		Avec cela vous pouvez faire un client http qui suporte le resuming , l?authentification , et bien d?autre chose , j?espere que ce tutorial comblera un peu le trou noir sur INDY , car y?a vraiment pas grand-chose sur lui ?

V IDPOP3
1 ) Connection à un serveur POP3
2 ) Nombre de mail
3 Récupération des Headers
4 Suppression d?un message
5 Récupérer un message
6 Informations basics d?un message récupéré
7 Plus Dur Récupération du Texte et des fichiers joints ?
	Etudions le TIDText
	Etudions le TIDAttachement
8 Conclusion

		1 ) Connection à un serveur POP3

idpop31.Host := 'VotrePOP'; //1
idpop31.Username := 'VOTREUsername'; //2
idpop31.Password := 'VotrePASS'; //3
idpop31.Connect(-1); //4

1 -> Indiquez ici votre serveur Pop3
2 -> Votre user
3 -> Votre Pass
4-> Demandez la connection avec comme argument -1 pour ( pas de timeout ) 
Si vous mettez 100 alors une erreur timeout sera généré après 100 ms d?attente 

		2 ) Nombre de mail

nbrmail := idpop31.CheckMessages;	

Cette fonction va chercher le nombre de message sur le compte POP3 ou nous nous sommes connectés , la fonction renvoit le nombre de message en Integer ?

		3 Récupération des Headers 

Pour utiliser cette fonction il vous faut placer un IDMessage (Dans Indy Divers )	, ici nous l?appellerons MSG

idpop31.RetrieveHeader(MAIL,Msg); //1 //2 //3

1 -> MAIL -> entier donnant le numéro du mail 
2 -> MSG -> nom de votre Idmessage 
3 -> Dans cette fonction on place les headers de MAIL dans le Idmessage MSG

    SUJET := (Msg.Subject) ; //1 
    SENDER := (Msg.From.Text) ; //2
    DATE := (DateToStr(Msg.Date)) ; //3 
    TAILLE := IntToStr(idPOP31.RetrieveMsgSize(MAIL))); //4 //5
  
1 -> On place le sujet du message dans la variable sujet 
2 -> Pareil mais avec , l?envoyeur du mail 
3 -> Pareil mais avec la date 
4 -> Ici on récupère la taille du mail avec la fonction RetrieveMsgSize
5 -> MAIL -> Numéro e mail en cour en INTEGER

		4 Suppression d?un message 

  idpop31.delete(MAIL); //1

1 -> On utilise la fonction delete pour supprimer MAIL -> Numéro du mail à supprimer

		5 Récupérer un message

idpop31.Retrieve(MAIL, Msg); //1

1 -> le message est récupéré , est stocké dans le IDMessage MSG , il peut contenir , text , images , Fichiers 

		6 Informations basics d?un message récupéré 

   EnvoiePar := Msg.From.Text; //1
   ReceptionDeEmail := Msg.Recipients.EmailAddresses; //2
   CC  := Msg.CCList.EMailAddresses; //3
   Sujet := Msg.Subject; //4
   Date := FormatDateTime('dd mmm yyyy hh:mm:ss', Msg.Date); //5
   Receipt := Msg.ReceiptRecipient.Text; //6
   Organisation := Msg.Organization; //7
   Priority:= IntToStr(Ord(Msg.Priority) + 1); //8

1 -> C?est l?adresse de celui qui a envoyé le mail
2 -> C?est le destinataire
3 -> CC
4 -> Le sujet
5 -> la date remarqué le FORMATDATETIME
6-> Receipt ( je sais pas à quoi ca sert ) 
7 -> Organisation
8 -> C?est la priorité

		7 Plus Dur Récupération du Texte et des fichiers joints ?
J?ai passé un bon bout de temps avant de comprendre le fonctionnement ( 1 tite Heure ) 
Mais maintenant tout va bien j?ai tout compris ?
Et je vais essayer de vous faire part de mes connaissances .

La base TIDAttachement -> veut dire Fichier Joint
La base TIDText -> veut dire Texte Joint 

Etudions le TIDText

               if Msg.MessageParts.Items[PARTIEMESSAGE] is TIdText then //1
                  begin                          Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[PARTIEMESSAGE]).Body); //2
                  end

1 -> Le message est composé de plusieurs parties bien distinctes , PARTIEMESSAGE  est la partie désiré du message .Donc Si PARTIEMESSAGE est un TIDTEXT alors on l?affiche
Voici la fonction qui permet de trouver le nombre de partie
Msg.MessageParts.Count // C?est la fonction pour trouver le nombre de partie
2 -> On place le Body de MSG dans Memo1 à l?aide de cette fonction 

Etudions le TIDAttachement

if (Msg.MessageParts.Items[PARTIEMESSAGE] is TIdAttachment) then //1 
            begin 
               NOM := (TIdAttachment(Msg.MessageParts.Items[PARTIEMESSAGE]).Filename); //2
  CONTENT : = (TIdAttachment(Msg.MessageParts.Items[PARTIEMESSAGE]).ContentType); //3
TIdAttachment(Msg.MessageParts.Items[intIndex]).SaveToFile('c:\Fichiers.txt')  ; //4
            end

1 -> On vérifie si PARTIEMESSAGE est un attachement
2 -> On prend le Nom du fichier est on le transmet à la variable NOM
3 -> On prend le type de fichier Plain/text Jpeg/image enfin c?est trucs la quoi , et on le mais dans CONTENT
4 -> On place le Tidattachment dans un fichier ici c:\fichiers.txt

Ca parait simple mais pour le chercher c?est plus compliqué ?

		8 Conclusion

Vous avez toute les fonctions necessaires pour faire un SUPER client mail ;-) , ici je n?ai pas décrit les messages de sortie , mais si la fonction est executé correctement alors elle à des chances de renvoyer la valeur TRUE , après on attaque le SMTP ?  

VI IDSMTP
	1.Se connecter Mode LOGIN Mode NONE
2.Se connecter
	3.Préparer un MSG
4 Envoyer le mail
5 Conclusion

Dans cette partie nous décrirons le composant IDSMTP , juste en envoyant un message , pour l?utiliser il faut le composant TIDMessage qui sera ici appelé MSG

	1.Se connecter Mode LOGIN Mode NONE

SMTP.AuthenticationType := atNone; //1	
SMTP.AuthenticationType := atLogin; //2

1 -> Sans Authentification 
2 -> Avec Authentification 

	2.Se connecter 

   SMTP.Username := Username;
   SMTP.Password := bentonpasse;
   SMTP.Host := Serveur;
   SMTP.Port :=port;
   SMTP.Connect(-1);//1

1 -> j?ai passé l?explication sur les ports est le login sinon mon cour ferait 20 000 pages ( même pas exagéré ;-) ) 
Donc comme pour les autres le -1 de connect signifie pas de timeout , si celui-ci est réglé à 1000
Alors si le serveur ne répond pas avant 1000 ms le programme génere une erreur attente dépassé ?

	3.Préparer un MSG

with MSG do //1
      begin
         Body.Assign(Memo1.Lines); //2
         From.Text := Tonmail; //3
         Recipients.EMailAddresses := DESTINATAIRE; //4
         Subject := SUJET; //5
         Priority := TIdMessagePriority(2); //6
         CCList.EMailAddresses := CC; //7
         BccList.EMailAddresses := BB; //8 
         Sender.Text := Envoyeur ; //9
         ExtraHeaders.Assign(?Un truc?); //10
End
TIdAttachment.Create(MSG.MessageParts, ?c:\fichier.exe?); //11
         
1 -> On utilise les fonctions suivantes avec MSG
2 -> C?est le texte
3 -> C?est celui qui envoit
4 -> C?est le destinataire
5 -> c?est le sujet
6 -> Priorité 
7 -> CC ???
8 -> BB ??? Je sais qu?il y?a ces deux la dans outlook donc j?ai mis ..
9 -> adresse de celui qui envoie 
10 -> C?est les headers à rajouté , Exemple pour le HTML
11 -> rajouter un fichier dans Tidattachment ici le fichier ?c:\fichier.exe?

	4 Envoyer le mail 
 
          SMTP.Send(Msg);

No Coment  ;-)

	5 Conclusion

Maintenant vous savez envoyer un mail ? 

VII.Evenements 

J?ai mis à part les évenements car il se ressemble beaucoup dans INDY , donc les choses expliquées ci dessous pour IDHTTP sont valables pour IDSMTP et IDPOP3

Les On Work Valable pour tout les composants INDY ;-)

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;const AWorkCountMax: Integer);
begin
 if AWorkMode = wmRead then //1
 begin
   ProgressBar1.Max := AWorkCountMax ; //2
   ProgressBar1.Position := 0 ; //3
 end;
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);
begin
 if AWorkMode = wmRead then
 begin
   ProgressBar1.Position := AWorkCount ; //4 
   Label1.Caption := IntToStr(AWorkCount) + 'Bytes de :' + inttostr(ProgressBar1.Max) ; //5
end;
end;

procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmRead then
   Label1.Caption := 'Fin?; //6
end;

TForm1.IdHTTP1WorkBegin -> Début de travaille du composant
TForm1.IdHTTP1Work -> Travaille en cour
TForm1.IdHTTP1WorkEnd -> Fin du travail

1 -> Si le mode de aworkmode est lecture alors
2 -> On aligne la progress bar ( le max ) avec le total de boulot ?
3 -> On règle la position de la progress bar à 0
4 -> On aligne la progress bar avec AWORKCOUNT qui nous renvoit le travaille éfféctué
5 -> On présente l?avancement
6 -> On indique la fin du boulot ...

Authentification FAILED ;?) 

procedure TForm1.IdHTTP1Authorization(Sender: TObject;
  Authentication: TIdAuthentication; var Handled: Boolean);
begin

showmessage('ERROR Non authentifié');
end;

Il nous renvoie ici si il y?a un problème d?authentification 

Connection et déconnection : 

procedure TForm1.IdHTTP1Connected(Sender: TObject);
begin
//1
end;

procedure TForm1.IdHTTP1Disconnected(Sender: TObject);
begin
end;
//2
end.

Classique ;-) 

1 -> si il y?a connection il nous renvoi ici 
2 -> si il y?a deconnection il nous renvoi ici 

Mon préféré le STATUS 

procedure TForm1.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
edit1.text:=astatustext; //1

end;

1 -> on place dans Edit1.text le status ?

VIII Conclusion 

J?espere que ce tutorial vous aura bien servie , moi en tout cas il me servira tout le temps de pense bête , j?espère d?ici un pti bout de temps , pouvoir sortir un tutorial toujours sur INDY , mais cette fois sur FTPClient , FTPServeur , TCP IP Client , TCP IP Serveur , Le multithreading 
Si vous pensez que c?est une bonne idée faîte le moi savoir webmaster@remixtech.com 
Vous pouvez aller faire un tour sur mon site pour l?instant que des softs en VB , mais bientôt des gros softs en delphi ?

Bye

http://www.remixtech.com 
  

Conclusion

Voila j'espere que ca vous à fait plaisir ,-)

Bye Bon dev Avec Indy  
  • signaler à un administrateur
    Commentaire de Bestiol le 14/03/2003 10:07:18

    il me semble que les points d'interrogation se mette automatiquement lorsqu'un caractère n'a pas été reconnu... Mais je suis pas sûr, car c'est vrai que ce sont tes apostrophes qui ont été remplacées (mais pas toutes... ??)

    En tout cas, c'est un bon tutoriel !!

    Quant à CC, ça veut dire "Copie Cachée", mais j'ai jamais vu BB... A moins que ça corresponde à Cci, qui est une autre forme de copie cachée...

  • signaler à un administrateur
    Commentaire de Remixgame le 14/03/2003 20:35:04

    Ouai ca doit être ca ...
    BB ca doit être cci ...
    Mais je n'utilise jamais ...

  • signaler à un administrateur
    Commentaire de Skyline le 29/03/2003 02:08:59

    Receipt c le destinataire du mail
      bon tutoriel en francais le seul que j'avais trouvé etait en chinois (ou un truc du genre ;)  ) si j'avais eu celui ci a une epoque ca m'aurais bien aide......

  • signaler à un administrateur
    Commentaire de weboide le 19/04/2003 16:24:43

    ca aide beaucoup ce tutoriel, merci!!

  • signaler à un administrateur
    Commentaire de taye78 le 14/05/2004 22:10:21

    slt, 10/10. Malgrés ce qui suit:
    " F := TFileStream.Create(?c:\fichier.exe?, fmCreate); "
    (dans la partie 1 oú tu explique idHTTP)
    La création de cette variable n'aurait pas dû être contenu dans le try mais juste avant.
    Car tu libère F dans le finally. Imagine si la création de la variable échoue, il y aura une erreur dans le finally qui essaye de libérer l'espace alloué.


    --wG

  • signaler à un administrateur
    Commentaire de zmc le 20/11/2004 18:19:55

    Salut, très bon tut, une bonne note pour la peine. A quand une suite ?

    PS: CC = Copie Carbone (Copie) et CCi = Copie Caché

  • signaler à un administrateur
    Commentaire de hichvbasic le 21/01/2005 19:14:33

    Merci Pour le tuto ,

  • signaler à un administrateur
    Commentaire de Dreuteu le 11/02/2005 16:54:13

    Merci ! Super tuto qui m'a ete tres utile...
    10/10 pr la peine :p

  • signaler à un administrateur
    Commentaire de Foucteau le 26/02/2005 09:11:51

    Premierement merci ce tuto etait indispensable et trés interressant .... j'ai cependent un petit pb sur l'instruction suivante :


    ...
    //Etudions le TIdText
       if Msg.MessageParts.Items[PARTIEMESSAGE] is TIdText then //1
                        begin ...

    j'ai l'erreur suivante :

    Identificateur 'TIdText' non déclaré a la ligne ...
    et sur la ligne suivante :

    Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[PARTIEMESSAGE]).Body);
    j'ai toujour une erreur sur TIdText mais en plus sur Body
    Identificateur 'Body'non déclaré a la ligne ...

    messages du debuger

    E2003 Identificateur non déclaré : 'TIdText
    E2029 ')' attendu(e) mais identificateur 'Body' trouvé(e)

    Voila les petit pb ...

    Choses au quelles j'ai pencer:
    J'utilise Delphi 2005 peut etre que avec j'ai eu INDY 10

    Dans l'aide il disent : ( text traduit par un traducteur internet)
    ########## Debut copy aide delphi 2005 pour indy 10
    Le Message Parts
    un autre domaine d'amélioration d'Indy 10 est l'architecture et la manipulation des pièces de messsage utilisées dans TIdMessage. L'architecture a été mise à jour pour permettre des opérations jet-basées pour le chargement, stockant, transmettant, et receiveing les pièces de message.La hiérarchie d'objet a également changé pour mettre en application le stockage de mémoire ou dossier-basé utilisé pour des pièces de message.

    En conséquence, TIdAttachment est maintenant une classe abstraite d'ancêtre pour des pièces de message d'attachement.Les applications devraient employer TIdAttachmentFile ou TIdAttachmentMemory en créant des pièces de message d'attachement, ou permettez à l'exemple de TIdMessage de mettre en application un comportement de défaut en utilisant son traiteur d'événement d'OnCreateAttachment.
    Les applications utilisation immobile TIdText de représenter les pièces de message basées par texte.
    Chacune des classes de pièce de message a une nouvelle valeur de PartType qui indique si la pièce de message représente une pièce des textes ou un attachement binaire. En outre, ContentID et ContentLocation peuvent maintenant être maintenus pour les exemples de pièce de message dans un message donné.

    Une autre facette de l'architecture de transmission de messages qui a été mise à jour dans Indy 10 est la représentation des pièces relatives de message dans un message, comme utilisé dans des messages de "multipart/alternative" et de "multipart/mime". Indy 10 a changé son exécution de la collection de pièces de message pour permettre la représentation des pièces nichées de message de MIME. Ceci inclut une meilleures utilisation et identification de la frontière de MIME pour des pièces de message. La propriété de ParentPart dans des descendants de TIdMessage et de TIdAttachment est employée pour exprimer le rapport parmi les diverses pièces de message. "

    ############### FIN Aide Delphi 2005 pour INDY 10

    sans etre bocoup plus explicite.

    J'ai recherché quelques méthodes pour voir comment récupéré les mails mais sans succés. mon gros pb c que je ne comprend pas assez bien l'anglais pour pouvoir capter le debut d'une honce d'une piste pour me permetre d'avancer.

    Donc voila si vous avez aussi ce pb ou que vous avez la solution sympat de la faire partager...

    Mes en tt cas merci encor pour cette excelent tutoriel trés bien fait

    Voici les composent Indy que j'ai déposer sur mon apli :
    Tidpop3
    Tidmessage

    Ceci vien peut etre de la je v essayer de trouver un composant Tidtext mais j'ai pas l'impression qu'il y en es un enfin je vous tiendrais au courent

    Merci a tous
    A la prochaine

  • signaler à un administrateur
    Commentaire de Filipe35 le 29/07/2005 17:55:30

    Salut,

    bon tuto mais j'ai cela dit une question
    on peut se connecter sur les site okay mais comment les afficher ?

    une petit exemple serait sympa

    merci

  • signaler à un administrateur
    Commentaire de fdb592 le 18/11/2005 15:27:06

    salut, splendide ce tuto !
    ça marche super bien :)

    mais une question subsiste... en existe t'il aussi un pour l'imap ???
    car le composant IdIMAP4 est quand meme violent à utiliser !!

    si quelqu'un a des info, merci de le faire savoir :)

  • signaler à un administrateur
    Commentaire de Filipe35 le 10/01/2006 17:22:46

    Comment récupérer les headers d'une connexion idHTTP ?

  • signaler à un administrateur
    Commentaire de kabiben le 17/10/2006 18:17:12

    Merci pour votre aide. Ca marche tres bien. Merci!!!

  • signaler à un administrateur
    Commentaire de Pierre42 le 23/11/2006 15:52:49

    Ca ne fonctionne pas avec la version 10 !

  • signaler à un administrateur
    Commentaire de Pierre42 le 23/11/2006 16:02:07

    Pour répondre  à Foucteau :

    Avec la version indy 10 :
    variables :
    i : integer ;
    texte : TIdText ;
    MemoCorps : Tmemo ;
    MSG: TIdMessage;

    unité à ajouter : TIdText

    code :
           for i := 0 to msg.MessageParts.Count -1 do
            begin
                if   msg.MessageParts[i].PartType = mptText  then
                begin
                    texte := TIdText.Create(nil);
                    texte.Assign(msg.MessageParts[i])    ;
                    MemoCorps.Text := texte.Body.Text ;
                    texte.free ;
                end ;
            end ;

  • signaler à un administrateur
    Commentaire de barbichette le 17/01/2007 23:30:59

    d'abord, 10/10 pour ce tuto, arrive juste à point...
    deux petites choses.
    Quand on fait un IdPOP31.Retrieve ou un IdPOP31.RetrieveHeader, il faut penser à faire Clear sur le IdMessage avant de rapeler la fonction une nouvelle fois pour charger le message suivant. Sinon, (chez moi en tout cas) il reste sur le premier message et ne charge jamais les autres. (sans erreur pour autant mais avec 3 ou 4 messages identiques).

    Ensuite, je reçoit des messages avec des caractères bizares..
    ?UTF-8?B?UG9ydGFibGU=?= pour "portable" ou "téléphone" pour "téléphone".
    C'est un problème de jeu de caractère mais je n'ai pas encore la réponse.
    Je continue de chercher dans mon coin mais si quelqu'un à une solution, merci de me la donner...

    Barbichette

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS