Det var faktisk grunden til jeg loggede ind - tanken strejfede mig også i går, men det var sent og der er en del at forklare når man ikke har alle filer med. Når man læser provedurerne, så husk på at jeg navngiver komponenterne med deres "initialer" først: Eksempelvis er lvAttachment et listview. Desuden så gør jeg altid programmerne på engelsk - slutresultatet er pænere end pidgindanglish.
Denne procedure henter headererne:
procedure TfrmMain.btnRetrieveClick(Sender: TObject); var i, Count : integer; Header : TIdMessage; begin lbLog.Clear; lvHeader.Items.Clear; lvAttachments.Items.Clear; reText.Clear;
for i := 1 to Count do begin Header := TidMessage.Create(nil); if idPOP3.RetrieveHeader(i,Header) then // Headers only with lvHeader.Items.Add do begin // Insert into ListView Caption := IntToStr(i); // A hack - this info must exist somewhere inside the header SubItems.Add(Header.From.Address); SubItems.Add(Header.From.Name); SubItems.Add(Header.Subject); Data := Header; end; end; finally IdPOP3.Disconnect; end; end;
Denne her henter resten af mailen og skriver den til en richedit eller laver en ikon i et listview:
procedure TfrmMain.lvHeaderDblClick(Sender: TObject); var i : integer; Text : TidText; MsgID : integer; Header : TIdMessage; Attachment : TidAttachment; begin Header := nil; MsgID := 0; with Sender as TListView do if assigned(Selected) then begin Header := Selected.Data; MsgID := StrToInt(Selected.Caption); // A hack - this info must exist somewhere inside the header end;
if assigned(Header) then begin lvAttachments.Items.Clear; idPOP3.Connect; try if idPop3.Retrieve(MsgID,Header) then begin // Read the rest for i := 0 to Header.MessageParts.Count - 1 do if (Header.MessageParts[i] is TidText) then begin Text := Header.MessageParts[i] as TidText; reText.Lines.Assign(Text.Body); // Clears the RE at the same time end else with lvAttachments.Items.Add do begin // Add item to listview Attachment := Header.MessageParts[i] as TidAttachment; ImageIndex := 0; Caption := Attachment.FileName; Data := Attachment; end; if cbDelete.Checked then // Delete if checked IdPOP3.Delete(MsgID); end; finally IdPOP3.Disconnect; end; end; end;
Disse to sørger hhv. for at man kan gemme filen fra listviewet og at objekterne frigives korrekt når programmet lukkes (bare så I ved jeg ikke glemte det):
procedure TfrmMain.lvAttachmentsDblClick(Sender: TObject); var Attachment : TidAttachment; begin with (Sender as TListView) do if assigned(Selected) then begin Attachment := Selected.Data; SaveDialog.FileName := Attachment.FileName; if SaveDialog.Execute then Attachment.SaveToFile(SaveDialog.FileName); end; end;
procedure TfrmMain.lvHeaderDeletion(Sender: TObject; Item: TListItem); var Header : TIdMessage; begin Header := Item.Data; Header.Free; end;
hvor finder du IdAttachment.dcu?? Jeg får nemlige fjel ved at den ikke kan finde den fil...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.