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??