Einzelnen Beitrag anzeigen

nezumi7

Registriert seit: 11. Apr 2011
67 Beiträge
 
#8

AW: .eml Dateien auslesen - wie decodieren?

  Alt 1. Dez 2013, 08:57
So, ich nochmal,

nachdem ich mein Prog so einigermaßen hinbekommen habe, taucht ein Problem auf, an dem ich mir die Zähne ausbeiße.

Erst Mal der Code, soweit relevant:

Delphi-Quellcode:
msg.LoadFromFile(FileName);
If (msg.ContentType = 'text/plain') or (msg.ContentType = 'text/html') then begin
   vtext := msg.Body.Text;
end else begin
      for intIndex := 0 to Pred(msg.MessageParts.Count) do begin
         
         if (msg.MessageParts.Items[intIndex] is TIdAttachmentFile) then begin //general attachment
         Listbox1.Items.Add(TIdAttachmentFile(msg.MessageParts.Items[intIndex]).Filename);
         end else begin //body text
            
            if msg.MessageParts.Items[intIndex] is TIdText then begin
            sl_temp.AddStrings(TIdText(msg.MessageParts.Items[intIndex]).Body);
            end
      
         end;
      end;
vtext := sl_temp.Text;
sl_temp.Clear;
end;

If (Pos('<html>',Copy(vtext,1,20)) > 0)
or ((Pos('<',Copy(vtext,1,5)) > 0) and ((Pos('>',Copy(vtext,1,100)) > 0) or (Pos('style=',Copy(vtext,1,100)) > 0) or (Pos('class=',Copy(vtext,1,100)) > 0) ))
then begin
vtext := htmltotxt(vtext);
end;
If Pos('Ã',vtext) > 0 then begin
   temp := vtext;
   vtext := utf8toansi(vtext);
      If vtext = 'then begin
      vtext := temp;
      vtext := utf8decode2(vtext);
      end;
end;
Wie ihr seht,lege ich den eigentlichen Text der email in der Variablen "vtext" ab.

Bei einigen emails kommt da aber nur der halbe Text an. Nach langem Rumgesuche habe ich festgestellt, dass der Text immer dort abgeschnitten wird, wo eine Zeile nur aus einem einzelnen Punkt besteht. Das ist vor allem dort so, wo im nicht decodierten Text der Zeilenumbruch durch ein = gekennzeichnet wird (weiß nicht, was das für ein Format ist), also z.B.:

"Er wohnt dort =FCbrigens in London=
."

Hier hat der Punkt wohl nicht mehr in die Zeile gepasst und ist in die nächste gerutscht. Wenn ich den Text mit dem obigen Code lade, hört er vor dem Punkt auf (obwohl die email noch weitergeht).

Jetzt meine Frage:

Kann ich die Nachricht, nachdem ich sie in "msg" geladen habe textmäßig bearbeiten und dann wieder an msg übergeben? Dann würde ich nämlich erst alle Zeilen löschen, die nur aus einem Punkt bestehen.

Also z.B. so:
Delphi-Quellcode:
stringlist1 := msg.text;
lc := stringlist1.count;
i := 0;
repeat
if stringlist1.strings[i] = '.then begin
stringlist1.delete[i];
dec(lc);
end else begin
inc(i);
end;
until
i=lc;

msg.text := stringlist1.text
Aber das geht natürlich nicht, weil es ja sowas wie "msg.text" nicht gibt.

Any idea??
  Mit Zitat antworten Zitat