FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).
Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.
L'équipe Delphi de Developpez.com.
Beaucoup de prestataires de services Internet proposent aujourd'hui de se connecter à leurs serveurs de mail grâce au protocole POP3.
Il est possible avec Delphi d'utiliser ce protocole pour lister, par exemple, les messages présents dans une boîte aux lettres électronique.
Voici un exemple avec le composant TIdPOP3 de la suite [URL="http://www.indyproject.org/Sockets/index.en.aspx">Indy[/URL] dans sa 9ème version.
Utiliser la suite Indy est assez simple. Posez sur votre fiche un TIdPOP3 (onglet Indy - Clients), un TIdMessage (onglet Indy - Divers) et éventuellement un TIdAntiFreeze (onglet Indy - Divers)
pour éviter que l'application ne se bloque lors des requêtes au serveur (Les composants Indy étant des composants synchrones).
Pour vous connecter à votre serveur, vous aurez besoin de quatre informations :
- Le serveur POP3 auquel se connecter
- Le port auquel s'y connecter. En règle générale c'est le port 110
- Le nom d'utilisateur à utiliser pour la connexion
- Le mot de passe associé à ce nom d'utilisateur
Le principe est le suivant :
Une fois que vous êtes connectés au serveur grâce au composant, vous appelez la fonction CheckMessages qui vous renvoie le nombre de messages présents sur le compte. Avec cette information, vous
récupérez les entêtes de chaque message grâce à une boucle et à la méthode RetrieveHeader.
Le TIdMessage est passé en paramètre à cette dernière pour stocker les informations du message ; il aurait éventuellement pu être créé dynamiquement.
Voici ce que cela donne en code :
Code Delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | procedure TForm1.btnVerifClick(Sender: TObject); var NbrMsgs, i: Integer; begin lstMsgs.Clear; //Renseignement des différentes infos de connexion POP3.Host := edServeur.Text; POP3.Port := StrToIntDef(edPort.Text, 110); POP3.Username := edUser.Text; //On donne le mot de passe en fonction de l'état de la case à cocher If cbxPass.Checked then POP3.Password := edPass.Text else POP3.Password := ''; try try //Connexion au serveur POP3.Connect; //On récupère le nombre de messages NbrMsgs := POP3.CheckMessages; lblMsg.Caption := IntToStr(NbrMsgs); for i := 1 to NbrMsgs do begin //On récupère l'entête du ième message POP3.RetrieveHeader(i, idMsg); //Affichage de quelques informations dans la liste lstMsgs.Items.Add('"' + idMsg.Subject + '" de ' + idMsg.From.Address); idMsg.Clear; end; except on e: exception do ShowMessage(e.Message); end; finally //Le travail est terminé, on se déconnecte POP3.Disconnect; end; end; |
Dans ce code :
- lstMsgs est une TListBox qui reçoit un Item par message trouvé
- lblMsg est un TLabel dans lequel on affiche le nombre de messages total
- idMsg et POP3 sont bien sûr nos TIdMessage et TIdPOP3
C'est tout ce qu'il y a à faire !
Pour cela, il vous faut deux composants : TIdPop3 et TIdMessage. Et il vous faut rajouter dans la clause uses de votre unité : IdAttachment et IdText.
Dans l'exemple ci-dessous, on va lister tous les mails et sauvegarder leur contenu sur le disque dur.
Code Delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Var i ,j : integer; begin // On se connecte au compte mail si ce n'est pas déjà fait if not IdPop3.connected then idPop3.connect; // On va boucler du premier au dernier message sur le compte for i := 1 to idPop3.CheckMessages do begin // On récupère le message complet idPop3.Retrieve(i,IdMessage); // Si on a plusieurs parties dans le mail alors on a une pièce jointe if IdMessage.MessageParts.Count > 0 then for j := 0 to IdMessage.MessageParts.count -1 do begin // Est-ce une partie texte du mail ? if IdMessage.MessageParts.Items[j] is TIdText then begin // A vous de traiter comme bon vous semble cette partie du mail Showmessage(TIdText(IdMessage.MessageParts.Items[j]).Body.text); // Par exemple end; // Est-ce une pièce jointe ? if IdMessage1.MessageParts.Items[j] is TIdAttachment then With TIdAttachment(IdMessage1.MessageParts.Items[j]) do if not FileExists('C:\Users\C:\Users\xxx\xxx\xxxx\' + FileName) then // On sauvegarde le fichier SaveTofile('C:\Users\xxx\xxx\xxxx\' + Filename); end; // for j end; // for i end; |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.