Entwickler-Ecke

Internet / Netzwerk - IdPOP3 e-Mail-Body manchmal leer


Björn karpenstein - Mi 19.10.05 18:34
Titel: IdPOP3 e-Mail-Body manchmal leer
Hallo ich bin ein bischen am Verzweifeln, weil bei manchen Mails mein eMail-Body leer ist. Bitte mal unten den Quelltext angucken - im If-Teil kommen die Anlagen - im else-Teil soll der Body reingeschrieben werden. Bitte helft mir, weiss ned weiter ;'o(. Bei manchen Mails kommt auch manchmal gar nix an (z.B. der GMX-Newsletter).

Hier finde ich einen unbeantworteten Beitrag, der das selbe Problem schildert:
http://www.delphipraxis.net/topic19262.html


Delphi-Quelltext
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:
      //Liste mit Mailanhängen und Mailbody
      for i := 0 to Pred(IdMessage1.MessageParts.Count) do
      begin
        if (IdMessage1.MessageParts.Items[i] is TIdAttachment) then
        begin
          Application.ProcessMessages;

          AdoQuery2.SQL.Clear;
          AdoQuery2.SQL.Add('SELECT max(id) FROM email');
          AdoQuery2.Open;
            maxid := AdoQuery2.Fields[0].AsInteger;
          AdoQuery2.Close;

          if not DirectoryExists(ExtractFilePath(Application.ExeName)+'anlagen\'+IntToStr(maxid)) then
          begin

            if not ForceDirectories(ExtractFilePath(Application.ExeName)+'anlagen\'+IntToStr(maxid)) then
            begin
              ShowMessage('Es scheint Sie verfügen über keine Rechte in dem Verzeichnis von EasyMail! Abbruch!');
              abort;
            end;


            TIdAttachment(IdMessage1.MessageParts.Items[i]).SaveToFile
            (
            ExtractFilePath(Application.ExeName)+'anlagen\'+IntToStr(maxid)+'\'+
            TIdAttachment(IdMessage1.MessageParts.Items[i]).Filename
            );

          end;
          {li := ListViewMessageParts.Items.Add;
          li.Caption :=
           TIdAttachment(IdMessage1.MessageParts.Items[intIndex]).Filename;}

          Application.ProcessMessages;
        end else
        begin
          if IdMessage1.MessageParts.Items[i] is TIdText then
          begin
            ADOQuery1.FieldByName('email').AsString :=  TIdText(IdMessage1.MessageParts.Items[i]).Body.Text;
            Application.ProcessMessages;
          end;
        end;
      end;


Raffo - Do 20.10.05 20:53

Hab eigentlich noch nicht ganz so viel Ahnung von der Kompo, aber kann es sein, das diese Mails als Text kommen und Du aber nur mit Message.Parts arbeitest?

Was ist, wenn Du die Mails entweder in RAW Format holst


Delphi-Quelltext
1:
pop3.RetrieveRaw(i,memo1.lines);                    


oder ganz normal


Delphi-Quelltext
1:
pop3.Retrieve(i,msg);                    


Auf der anderen Seite hab ich schon gemerkt, wenn man "normal" die Mail abholt und es ist eine Multipart, zeigt er im Body nur "This is a multipart message" an.