AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke .eml Dateien auslesen - wie decodieren?
Thema durchsuchen
Ansicht
Themen-Optionen

.eml Dateien auslesen - wie decodieren?

Ein Thema von nezumi7 · begonnen am 5. Nov 2013 · letzter Beitrag vom 17. Dez 2013
Antwort Antwort
nezumi7

Registriert seit: 11. Apr 2011
71 Beiträge
 
#1

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
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: .eml Dateien auslesen - wie decodieren?

  Alt 1. Dez 2013, 09:15
.. ob das hier eine Rolle spielt weiß ich nicht.
Aber wenn ich mich recht entsinne bezeichnet ein allenstehender "." in einer Zeile
im pop3 Protokoll das Ende einer Nachricht.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
nezumi7

Registriert seit: 11. Apr 2011
71 Beiträge
 
#3

AW: .eml Dateien auslesen - wie decodieren?

  Alt 1. Dez 2013, 10:47
ja, das hab ich auch gelesen. Hilft mir aber nicht weiter.

Ich hab jetzt versucht, die .eml Datei in eine Stringlist zu laden (da will ich dann die Punkte rausmachen), den Stringlist-Text in ein MemoryStream zu schreiben und von dort die IDMessage zu laden:

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
sl: TStringlist;
eintrag, empf: String;
tsm: TMemoryStream;
begin
If OpenDialog1.Execute then begin
sl := TStringlist.Create;
tsm := TMemoryStream.Create;
sl.LoadFromFile(OpenDialog1.FileName);
//hier noch: einzelne Punkte rausmachen
sl.SaveToStream(tsm);
msg.LoadFromStream(tsm);

empf := msg.From.Text;
Label1.Caption := empf;

tsm.Free;
sl.Free;
end;

end;
....geht aber nicht. (Label1 müsste ja z.B. den Empfänger anzeigen. Tuts aber nicht. "empf" ist leer)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#4

AW: .eml Dateien auslesen - wie decodieren?

  Alt 1. Dez 2013, 10:59
Wenn du //hier noch: einzelne Punkte rausmachen wegläßt, dann geht es auch nicht?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nezumi7

Registriert seit: 11. Apr 2011
71 Beiträge
 
#5

AW: .eml Dateien auslesen - wie decodieren?

  Alt 1. Dez 2013, 11:55
Nee, da hab ich ja noch nix gecodet.

Wollte erst Mal sehen, ob das überhaupt funktioniert mit String in Memory Stream und dann in msg....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#6

AW: .eml Dateien auslesen - wie decodieren?

  Alt 3. Dez 2013, 21:47
Delphi-Quellcode:
sl.SaveToStream(tsm);
tsm.Position := 0; // <<<<<<<<
msg.LoadFromStream(tsm);
So?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nezumi7

Registriert seit: 11. Apr 2011
71 Beiträge
 
#7

AW: .eml Dateien auslesen - wie decodieren?

  Alt 17. Dez 2013, 14:20
ja, das wars!

Danke Dir!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz