Mail senden mit Synapse - Zeichencodierungsproblem [gelöst]

Alle Fragen zur Netzwerkkommunikation
Antworten
AlterMann
Beiträge: 209
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 2.0.0 r60307 FPC 3.0.4 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Mail senden mit Synapse - Zeichencodierungsproblem [gelöst]

Beitrag von AlterMann »

Hallo mal wieder

Ich versuche seit einer geraumen Weile eine einfache Mailsendefunktion in eine vorhandene Applikation zu integrieren.

Dazu öffne ich eine Form in der der Nutzer den Betreff in ein Edit und den Mailtext in ein Memo eingeben kann.
Anschließend wird das so versendet:

Code: Alles auswählen

 
 Edit2.Text := CharsetConversion(Edit2.Text,GetCurCP,ISO_8859_15);
 result := SendToEx(absender,Edit1.Text,Edit2.Text,server,Memo1.Lines,benutzer,passwort);
 


Das Senden funktioniert auch wunderbar, aber: Alle Umlaute werden zu Sonderzeichen verzerrt.

"Testbetreff ä ö ü Ä Ö Ü ß" wird zu "Testbetreff ? ö ? 1/4 ?" ?- Ãœ ß"

Die erste Zeile mit dem CharsetConversion sollte das schon beheben, aber es wird immer schlimmer.
Der Zeichensatz vom Edit2 steht auf DEFAULT_CHARSET

In die function SendToEx in der unit smtpsend von synapse habe ich folgende Zeile eingefügt:

Code: Alles auswählen

 
    t.Insert(0, 'Content-Type: text/plain; charset=iso-8859-15; format=flowed; delsp=yes');
 


Die wird auch in den Header eingefügt, macht's aber nicht besser.

Jemand eine Idee?

Danke für's Lesen
Christian
Zuletzt geändert von AlterMann am Mo 4. Sep 2017, 11:58, insgesamt 1-mal geändert.
Früher war alles besser. Und aus Holz!

Michl
Beiträge: 2340
Registriert: Di 19. Jun 2012, 12:54

Re: Mail senden mit Synapse - Zeichencodierungsproblem

Beitrag von Michl »

Wenn du die ausführlichere Methode nutzt, kannst du den Mailtext entsprechend kodieren:

Code: Alles auswählen

    Mime.AddPartTextEx(PartText, Mime.MessagePart, UTF_8, True, ME_8BIT);

Siehe: http://www.lazarusforum.de/viewtopic.php?f=26&t=9431
Ein komplettes Beispiel hatte ich versehentlich mal in einem falschen Thread gepostet: https://www.lazarusforum.de/viewtopic.php?p=94436#p94436

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

AlterMann
Beiträge: 209
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 2.0.0 r60307 FPC 3.0.4 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Mail senden mit Synapse - Zeichencodierungsproblem

Beitrag von AlterMann »

Vielen Dank, das hat prächtig geholfen.

Falls jemand mit einem ähnlichen Problem auf diesen Thread stößt, so sieht die Senderoutine jetzt aus:

Code: Alles auswählen

 
procedure TForm303.Button3Click(Sender: TObject);//Senden
 
 var result : boolean;
     MIMEText    : TStrings;
     MIMEPart    : TMimePart;
     MIMEMessage : TMimeMess;
 
  begin
     MIMEText := TStringList.Create;
     MIMEText.Add(Memo1.Lines.Text);
 
     MIMEMessage := TMimeMess.Create;
 
     with MIMEMessage do
     try
       Header.CharsetCode := UTF_8;
       Header.Date := Now;
       Header.From := absender;
       Header.ToList.Clear;
       Header.ToList.Add(Edit1.Text);
       Header.CcList.Clear;
       Header.Subject := Edit2.Text;
 
       MIMEPart := AddPartMultipart('mixed', nil);
 
       AddPartTextEx(MIMEText, MimePart, UTF_8, True, ME_8BIT);
 
       EncodeMessage;
 
       result := SendToRaw(Header.From,Header.ToList.CommaText,server,Lines,benutzer,passwort);
     finally
       Free;
       MIMEText.Free;
     end;
 if result then
  begin
   Panel1.Visible:=true;
   Timer1.Enabled:=true;
  end;
end;
 


Grüße
Christian
Früher war alles besser. Und aus Holz!

Antworten