Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Email Betreff von ISO_8859-1 in Latin1 wandeln (https://www.delphipraxis.net/60339-email-betreff-von-iso_8859-1-latin1-wandeln.html)

Schaedel 5. Jan 2006 14:27


Email Betreff von ISO_8859-1 in Latin1 wandeln
 
Hallo und guten Tag,

ich habe mir ein Mailprogramm geschrieben welches meine Emails über Pop3 verwalten soll.(Componente = Internetmailsuite Remotepop)
Ich lese verschiedene Header aus z.b. Sender,Empfänger und Betreff.
Wenn ich mit Outlook Emails an das Postfach sende und dann den Betreffheader auslese er im format ISO_8859-1 ankommt.

Bsp.
=?iso-8859-1?Q?WG=3A_XXX=5FBLX=2ES2L=3B_XXXXXXX_f=FCr_XXXXX_= 2XXXX?=

er schreibt mir zwar die ISO dazu aber wandelt keine Umlaute und andere Sonderzeichen.

Delphi-Quellcode:
procedure TF_Mailverwaltung.ButtonVerbindenClick(Sender: TObject);
var
  Button,Button1,Button2 : TRadiobutton;
  panel : Tpanel;
  i,j :integer;
  SL :TStrings;
begin
  ButtonVerbinden.Enabled := false;
  for i := 0 to msRemotePOP.RemoteInfo.Count -1 do begin
    Tpanel(findcomponent('panel'+inttostr(i))).free;
    for j := 0 to 3 do
      StringGrid.Cells[j,i+1] := '';
  end;
  StringGrid.Height :=70;
  Statusbar.Panels.Items[0].Text := 'Verbindung mit POP3Server wird hergestellt';
  try
    msRemotePOP.Server := Server;
    msRemotePOP.UserName := XXXX;
    msRemotepop.Password := XXXX;
    msRemotePOP.MessageDirectory := 'C:\XXXXX\';
    msRemotePOP.WinsockLoaded := true;
    msRemotePOP.OpenConnection;
    msRemotePOP.UpdateRemoteInfo;
    Statusbar.Panels.Items[0].Text := 'Mails werden gelesen';
    for i := 0 to msRemotePOP.RemoteInfo.Count -1  do begin
      Stringgrid.RowCount:= i+2;
      sl := msRemotePOP.RemoteInfo.Items[i].Headers;
      for j := 0 to sl.Count-1 do begin
// hier wird der Header ausgelesen
        if pos('Subject:',sl.Strings[j])>0 then begin
          StringGrid.Cells[1,i+1] := trim(copy(sl.Strings[j],9,255));
        end;
        if pos('Date:',sl.Strings[j])>0 then begin
          StringGrid.Cells[3,i+1] := trim(copy(sl.Strings[j],6,26));
        end;
        if pos('From:',sl.Strings[j])>0 then begin
          StringGrid.Cells[2,i+1] := trim(copy(sl.Strings[j],pos('<',sl.Strings[j]),255));
        end;
      end;
      StringGrid.cells[0,i+1] := inttostr(i+1);
      StringGrid.Height := StringGrid.Height +15;
      if F_Mailverwaltung.Height < StringGrid.Height +30 then begin
        F_Mailverwaltung.Height := F_Mailverwaltung.Height +100;
      end;
    end;
// Hier wird dynamisch ein Panel erzeugt auf dem 3 Radiobuttons liegen ehr unwichtig für den ablauf des Programm
    for i := 0 to msRemotePOP.RemoteInfo.Count -1 do begin
      Button := TRadioButton.Create(self);
      panel := TPanel.Create(self);
      panel.Name := 'Panel' +inttostr(i);
      panel.Width := 50;
      panel.Top := 19 + (17 * i);
      panel.Left := 5;
      panel.Height := 17;
      panel.Caption := '';
      panel.BevelOuter := bvnone;
      panel.show;
      panel.parent := PanelOben;
      button.parent:= panel;
      button.Name := 'MyRadiobutton'+ inttostr(i);
      button.Left := 5;
      button.Top := 0;
      button.Width := 17;
      button.Caption := '';
      button.show;
      Button1 := TRadioButton.Create(self);
      button1.parent:= panel;
      button1.Name := 'MyRadiobutton'+ inttostr(i) +'a';
      button1.Left := 21;
      button1.Top := 0;
      button1.Width := 17;
      button1.Caption := '';
      button1.show;
      Button2 := TRadioButton.Create(self);
      button2.parent:= panel;
      button2.Name := 'MyRadiobutton'+ inttostr(i)+'b';
      button2.Left := 37;
      button2.Top := 0;
      button2.Width := 17;
      button2.Caption := '';
      button2.show;
    end;
  except
    on E: Exception do begin
      Showmessage('Der Abruf der Mails ist fehlgeschlagen!');
      ButtonVerbinden.Enabled := true;
      exit;
    end;
  end;
  StringGrid.Visible:= true;
  StatusBar.Panels.Items[0].text := 'Mails erfolgreich eingelesen!';
  ButtonVerbinden.Enabled := true;
Hat jemand eine Idee wie ich den Betreff der durch die ISO zerstückelt wurde wieder gerade gebogen bekomme? :?:

Ich suche seit heute morgen im Forum nach Lösungen und konnte nichtmals einen Ansatz finden. :gruebel:

Mit freundlichen Grüßen

Schaedel :wall:

Schaedel 5. Jan 2006 16:41

Re: Email Betreff von ISO_8859-1 in Latin1 wandeln
 
Ich habe das Problem vorher abgefangen indem ich keine umlaute im Betreff zulasse.
Empfinde dies aber nur als Notlösung.
Also falls jemand einen Tipp hat immer her damit =)

:mrgreen:

marabu 5. Jan 2006 17:22

Re: Email Betreff von ISO_8859-1 in Latin1 wandeln
 
Herzlich Willkommen in der Delphi-PRAXiS, Schaedel.

Sieht nach nested encoding aus. SMTP protocol header sind in 7bit ASCII kodiert, als escape Mechanismus wurde in deinem Beispiel quoted printable verwendet - "=FC" entspricht dann dem "ü" im ISO-8859-1 encoding. Du kannst einfach beim Auftreten eines Gleichheitszeichens die beiden folgenden hex digits wieder in einen character verwandeln. Die Ächtung der Umlaute halte ich für eine sehr drastische Maßnahme.

Neujahrsgrüße vom marabu

Schaedel 5. Jan 2006 21:00

Re: Email Betreff von ISO_8859-1 in Latin1 wandeln
 
Danke das fiel mir auch gerade auf ;)

Das schlimme ist ja nur das er mir den Betreff total zerstückelt und gar nichts mehr an seinen richtigen Platz lässt.
Ich denke die Ächtung der Umlaute bei diesen Mails spielt keine arg so große rolle ;)

Der Nutzen ist einfach kleiner als der Aufwand.
Trotzdem danke ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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