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 / Exemple :
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.