Avatar billede fun22 Nybegynder
27. august 2004 - 16:10 Der er 7 kommentarer og
1 løsning

Hente body fra mail

Hej

Hvordan får jeg vist body, eller selve meddelelsen? Kan godt hente afsender, emne osv.

Bruger Indy pop3...

Mvh
Jesper

P.s
Jeg har set i demoerne, men kan ikke finde rundt i dem..
Avatar billede fun22 Nybegynder
29. august 2004 - 12:28 #1
ingen der kan hjælpe?
Avatar billede hrc Mester
30. august 2004 - 11:40 #2
Jeg har noget kode liggende - derhjemme - faktisk ret let så vidt jeg husker. Et af de mange projekter der stoppede når "nøden" i opgaven var løst.

Sender det i eftermiddag.
Avatar billede fun22 Nybegynder
30. august 2004 - 17:32 #3
Det lyder godt ;) du kan sende det til jtp@home2.gvdnet.dk
Avatar billede hrc Mester
30. august 2004 - 23:20 #4
Så ligger den i udbakken.
Avatar billede stone Forsker
31. august 2004 - 19:08 #5
synes da nok at koden burde være tilgængelig for alle på eksperten...
Avatar billede hrc Mester
31. august 2004 - 22:58 #6
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;

  idPOP3.Host := eHost.Text;
  idPOP3.Username := eUsername.Text;
  idPOP3.Password := ePassword.Text;

  idPOP3.Connect;
  try
    Count := idPOP3.CheckMessages;
    lbLog.Items.Add(format('Messages: %d',[Count]));
    lbLog.Items.Add(format('Size: %d',[idPOP3.RetrieveMailBoxSize]));

    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;
Avatar billede fun22 Nybegynder
08. september 2004 - 19:13 #7
Så siger jeg tusinde tak for hjælpen ;)
Avatar billede fun22 Nybegynder
09. september 2004 - 18:32 #8
lige....

hvor finder du IdAttachment.dcu?? Jeg får nemlige fjel ved at den ikke kan finde den fil...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester