for j := 0 to Pred(Idmessage.MessageParts.Count) do
for j := 0 to Idmessage.MessageParts.Count-1 do
// On va boucler du premier au dernier message sur le compte for i := 1 to idPop31.CheckMessages do begin // on vide le contenu de IdMessage avant relever un nouveau message IdMessage1.Clear; // On récupère le message complet idPop31.Retrieve(i,IdMessage1); // Si on a plusieurs parties dans le mail alors on a une pièce jointe if IdMessage1.MessageParts.Count > 0 then for j := 0 to IdMessage1.MessageParts.count -1 do begin // Est-ce une partie texte du mail ? if IdMessage1.MessageParts.Items[j] is TIdText then begin // évite d'afficher un message vide if TIdText(IdMessage1.MessageParts.Items[j]).Body.text <> EmptyStr then // A vous de traiter comme bon vous semble cette partie du mail Showmessage(TIdText(IdMessage1.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 begin with OpenLoadStream do try ShowmessageFmt('Fichier joint: %s de %d Octets', [ContentTypeName, Size]); finally CloseLoadStream; end; if not FileExists(ExtractFilePath(Application.ExeName) + FileName) then // On sauvegarde le fichier dans le répetoire de l' application SaveTofile(ExtractFilePath(Application.ExeName) + Filename); end; end; // for j end; // for i
ps: Pensez à utiliser la balise de code (Icône flèche vers la bas puis cliquer sur Delphi) pour poster vos exemples de code ça facilite grandement la lecture.
Merci
procedure TForm1.ListViewMailClick(Sender: TObject); var i, j, Index: Integer; begin If Not idPop31.Connected Then idPop31.Connect; Screen.Cursor:=crHourGlass; //POP3.Retrieve(ListViewMail.Selected.Index + 1 , idMsg); if (idPOP31.CheckMessages >= 1) then ///for i := 1 to idPop31.CheckMessages do //IdMessage1.Clear; //idPop31.Retrieve(i, IdMessage1); if (IdMessage1.MessageParts.Count > 0) then begin for i := 1 to idPop31.CheckMessages do begin IdMessage1.Clear; idPop31.Retrieve(i,IdMessage1); for j := 0 to IdMessage1.MessageParts.count -1 do begin if IdMessage1.MessageParts.Items[j] is TIdText then begin if TIdText(IdMessage1.MessageParts.Items[j]).Body.text <> EmptyStr then Showmessage(TIdText(IdMessage1.MessageParts.Items[j]).Body.text); end; if IdMessage1.MessageParts.Items[j] is TIdAttachment then With TIdAttachment(IdMessage1.MessageParts.Items[j]) do begin with OpenLoadStream do try ShowmessageFmt('Fichier joint: %s de %d Octets', [ContentTypeName, Size]); finally CloseLoadStream; end; if not FileExists(ExtractFilePath(Application.ExeName) + FileName) then // On sauvegarde le fichier dans le répetoire de l' application SaveTofile(ExtractFilePath(Application.ExeName) + Filename); end; end; // for j end; // for i end; Screen.Cursor:= crDefault; Application.ProcessMessages; End;
if (IdMessage1.MessageParts.Count > 0) then
procedure TForm1.ListViewMailClick(Sender: TObject); var i, j, Index : Integer; begin if not idPop31.Connected then idPop31.Connect; Screen.Cursor := crHourGlass; //POP3.Retrieve(ListViewMail.Selected.Index + 1 , idMsg); if (idPOP31.CheckMessages >= 1) then ///for i := 1 to idPop31.CheckMessages do //IdMessage1.Clear; //idPop31.Retrieve(i, IdMessage1); // ******* Modification ****** IdMessage1 n'est pas encore valide ici //if (IdMessage1.MessageParts.Count > 0) then // **** supprimé begin for i := 1 to idPop31.CheckMessages do begin IdMessage1.Clear; idPop31.Retrieve(i, IdMessage1); // ****** modification ************ if (IdMessage1.MessageParts.Count > 0) then // déplacé ici for j := 0 to IdMessage1.MessageParts.count - 1 do begin if IdMessage1.MessageParts.Items[j] is TIdText then begin if TIdText(IdMessage1.MessageParts.Items[j]).Body.text <> EmptyStr then Showmessage(TIdText(IdMessage1.MessageParts.Items[j]).Body.text); end; if IdMessage1.MessageParts.Items[j] is TIdAttachment then with TIdAttachment(IdMessage1.MessageParts.Items[j]) do begin with OpenLoadStream do try ShowmessageFmt('Fichier joint: %s de %d Octets', [ContentTypeName, Size]); finally CloseLoadStream; end; if not FileExists(ExtractFilePath(Application.ExeName) + FileName) then // On sauvegarde le fichier dans le répetoire de l' application SaveTofile(ExtractFilePath(Application.ExeName) + Filename); end; end; // for j end; // for i end; Screen.Cursor := crDefault; Application.ProcessMessages; end;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionprocedure TForm1.ListViewMailClick(Sender: TObject); var i, j, Index: Integer; Item : TListItem; Attachment: TIdAttachment; FileName: String; begin Screen.Cursor:=crHourGlass; if not IdPop31.connected then idPop31.connect; IdMessage1.Clear; Memo1.Clear; for i := 1 to idPop31.CheckMessages do <= 25 messages *** begin /// modification de idPOP31 idPop31.Retrieve(ListViewMail.Selected.Index + 1 , idMessage1); StaticText1.Caption:= 'De : '+ IdMessage1.From.Address; StaticText2.caption:= 'À : '+ idMessage1.Recipients.EMailAddresses; StaticText3.Caption:= 'Object : '+ idMessage1.Subject; StaticText4.Caption:= 'Date : '+ FormatDateTime('dd/mm/yyyy à hh:mm', idMessage1.Date); if IdMessage1.MessageParts.Count > 0 then for j := 0 To (idMessage1.MessageParts.Count) -1 do begin if TIdText(IdMessage1.MessageParts.Items[j]).Body.text <> EmptyStr then begin Showmessage(TIdText(IdMessage1.MessageParts.Items[j]).Body.text); **** <= le message s'affiche 25 fois (idPop31.CheckMessages = 25 ) puis, il s'affiche en HTML 25 fois aussi Memo1.Lines.Add(TIdText(IdMessage1.MessageParts.Items[j]).Body.text) // texte +code HTML dans le memo autant de fois que idPOP31.checkMessages end; if IdMessage1.MessageParts.Items[j] is TIdAttachment then with TIdAttachment(IdMessage1.MessageParts.Items[j]) do begin with OpenLoadStream do try ShowmessageFmt('Fichier joint: %s de %d Octets', [ContentTypeName, Size]); --- MIME , size aucune info finally CloseLoadStream; end; //if not FileExists(ExtractFilePath(Application.ExeName) + FileName) then /// SaveTofile(ExtractFilePath(Application.ExeName) + Filename); end; end; //fin de boucle j end; // fin de boucle i Screen.Cursor:= crDefault; End; idPop31.Disconnect; /// sur le OnClose de FormClose()
j'ai les fichiers , mais * .dcu*, pas les fichiers *.pas* ...
Suite à ton message sur INDY, j'ai réussi à trouver sur le net des fichiers, et je les ai mis dans ma clause Uses :
IdMessage, IdAttachment, IdText, IdAttachmentFile,IdAttachmentMemory, IdTStrings, IdMailBox
lorsque je compile le projet, il y à bien les (*.dcu), avec les autres fichiers de mon projet.
for j := 0 to Pred(IdMessage1.MessageParts.Count) do begin if (IdMessage1.MessageParts.Items[j] is TIdAttachment) then begin Liste := ListViewAttachments.Items.Add; Liste.ImageIndex:= 2; Liste.Caption := (TIdAttachment(IdMessage1.MessageParts.Items[j]).Filename); FileNameString := (TIdAttachment(IdMessage1.MessageParts.Items[j]).StoredPathName); AssignFile(Fichier, FileNameString); Reset(Fichier); Size := FileSize(Fichier); Liste.SubItems.Add(IntToStr((size)Div 1024) +' ko'); end else begin if IdMessage1.MessageParts.Items[j] is TIdText then begin RichEdit1.Lines.Add((TIdText(IdMessage1.MessageParts.Items[j]).Body.Text)); end; end; end;
function StripHTML(S: string): string; var TagBegin, TagEnd, TagLength: integer; begin TagBegin := Pos( '<', S); while (TagBegin > 0) do begin TagEnd := Pos('>', S); TagLength := TagEnd - TagBegin + 1; Delete(S, TagBegin, TagLength); TagBegin:= Pos( '<', S); end; Result := S; End;
Modifié le 27 août 2017 à 01:11
Merci de m'avoir répondu,
Le problème est toujous le même, avec l'une ou l'autre des boucles For.
Je pense que le prolème vient que je n'arrie pas à afficher si il y à un fichier joint avec le mail dans mon ListViewMail (ListViewMail: TListView).
voici le code pour récupérer les mails:
je me suis apparçu, que je n'ai pas le fichier " IdAttachmentFile.pas" (???),
mais, il faut que je le déclare dans Uses avec les composants
Désolé de mes questions, mais je débute depuis peu
En vous remercient d'avance
Cordialement
27 août 2017 à 12:52
j'ai l'impression que tu cherches à utiliser un code pour Indy10 sous Indy9
pourquoi je dis ça ?
parce que
IdAttachmentFile.pas appartient à Indy10
as-tu déjà vu ce tuto ?
Cordialement,
@+
Modifié le 27 août 2017 à 16:32
Merci pour la réponse,
oui, j'ai l'exemple du tuto en plusieurs partie que j'ai eu sur le net.
les liens de téléchargement ne fonctionnent plus, j'ai une page d'erreur.
IdAttachment , IdText, IdAttachmentFile, bien sont déclarés dans:
Uses windows.....
puis, j'ai eu ce code:
Comment récupérer les pièces jointes d'un mail ?
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.
*
donc, après avoir passé toute la nuit, pour chercher une solution que je n'ai toujours pas ... lol
je n'ai vu que ce type de code sur le net
si, j'ai les fichiers , mais * .dcu*, pas les fichiers *.pas*
C:\Program Files\Borland\BDS\3.0\lib\Indy10\IdAttachment.dcu
C:\Program Files\Borland\Delphi2005\Setup Files\Install\program files\Borland\BDS\3.0\lib\Indy10\IdAttachment.dcu
C:\Program Files\Borland\BDS\3.0\lib\Indy10\IdText.dcu
C:\Program Files\Borland\Delphi2005\Setup Files\Install\program files\Borland\BDS\3.0\lib\Indy10\IdText.dcu
et j'ai bien la version INDY 10
quelle est la différenceente les deux INDY ????
merci d'avance, bonne journée
cordialement