Synapse: UTF-8-kodierte E-Mails

Alle Fragen zur Netzwerkkommunikation
Antworten
Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Synapse: UTF-8-kodierte E-Mails

Beitrag von Socke »

Hallo zusammen,

wie kann ich mit Synapse (TMimeMess) E-Mails erstellen, die in UTF-8 kodiert sind?
Ich verwende FPC 3.1.1; die Eingabetexte liegen in UTF-8 vor.

Grüße
Socke
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von theo »

Bin auch nicht mehr sicher.
Hast du es mit CharsetCode o.ä. probiert? http://synapse.ararat.cz/doc/help/mimep ... harsetCode

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Socke »

theo hat geschrieben:Bin auch nicht mehr sicher.
Hast du es mit CharsetCode o.ä. probiert? http://synapse.ararat.cz/doc/help/mimep ... harsetCode

Ja, wobei ich ziemlich mir nicht ganz sicher bin, wie das funktioniert.

Code: Alles auswählen

var
  MailBody: RawByteString;
  sl: TStringList;
  Mime: TMimeMess;
  MessagePart: TMimePart;
begin
  MailBody := Format(MailBody, [stringarg]);
  // Format konvertiert alles zur Systemcodepage, daher zurück nach UTF-8
  SetCodePage(MailBody, CP_UTF8, True);
 
  sl := TStringList.Create;
  try
    sl.Text := MailBody;
    MessagePart := Mime.AddPartText(sl, nil);
    MessagePart.TargetCharset := UTF_8;
    MessagePart.CharsetCode := UTF_8;
    MessagePart.Charset := 'UTF-8';
    MessagePart.ConvertCharset := False;
  finally
    sl.Destroy;
  end;

Edit:
Im Header steht "Content-type: text/plain; charset=ISO-8859-1"; der Text ist zwar UTF-8 kodiert, die Ausgabe als QuotedPrintable ist aber etwas ganz anderes (d.h. weder UTF-8 noch Windows-Systemcodepage).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von theo »

K.A. vllt. geht es auch einfacher.
Die Convenience Mail Funktion ist so aufgebaut:

http://sourceforge.net/p/synalist/code/ ... d.pas#l698

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Socke »

theo hat geschrieben:K.A. vllt. geht es auch einfacher.
Die Convenience Mail Funktion ist so aufgebaut:

http://sourceforge.net/p/synalist/code/ ... d.pas#l698

Ich wollte für zehn E-Mails keine zehn Verbindungen öffnen...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von theo »

Socke hat geschrieben:
theo hat geschrieben:K.A. vllt. geht es auch einfacher.
Die Convenience Mail Funktion ist so aufgebaut:

http://sourceforge.net/p/synalist/code/ ... d.pas#l698

Ich wollte für zehn E-Mails keine zehn Verbindungen öffnen...


Verstehe nicht was du meinst.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Socke »

Der Text wird von Synapse korrekt verarbeitet und die E-Mail korrekt erzeugt. Der Code oben sollte also korrekt sein.

Die Ursache liegt in der Stringkonvertierung von FPC 3.x. :P

Edit: Aktuell wird der Betreff noch als ISO-8859-1 angegeben, obwohl UTF-8 im String enthalten ist. Gibt es hier eine Lösung?

Edit2: Synapse hat eine fest eingebaute Liste an Code Pages, die für den Header verwendet werden; Hier ist UTF-8 per Standard nicht enthalten. Hier kann man einfach UTF-8 hinzufügen.

Code: Alles auswählen

// Datei: synachar.pas, Zeile 170
  {:Default set of charsets for @link(IdealCharsetCoding) function.}
  IdealCharsets: TMimeSetChar =
    [UTF_8, ISO_8859_1, ISO_8859_2, ISO_8859_3, ISO_8859_4, ISO_8859_5,
    ISO_8859_6, ISO_8859_7, ISO_8859_8, ISO_8859_9, ISO_8859_10,
    KOI8_R, KOI8_U
    {$IFNDEF CIL} //error URW778 ??? :-O
    , GB2312, EUC_KR, ISO_2022_JP, EUC_TW
    {$ENDIF}
    ];
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Michl »

Weil ich eben selber darüber gestolpert bin, für nachfolgende Leser, bei mir geht das Out of the Box durch verwenden von AddPartTextEx statt AddPartText und ohne weitere Konvertierungen:

Code: Alles auswählen

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

Code: Alles auswählen

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

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von TT73GP7 »

hach

ich glaube ich habe ein ähnliches Problem.
Mein Problem ist, das in den E-Mails keine umlaute dargestellt werden können.

nur wo "Formatiere" ich die E-Mails anders?

Code: Alles auswählen

 
 
procedure TfrmSendMail.btnSendenClick(Sender: TObject);
var
  MIMEText    : TStrings;
  MIMEPart    : TMimePart;
  MIMEMessage : TMimeMess;
begin
  MIMEText := TStringList.Create;
  MIMEText.Add(edNachricht.Lines.Text);
 
  MIMEMessage := TMimeMess.Create;
 
  with MIMEMessage do
  try
    Header.Date := Now;
    Header.From := lnSQL('Absender', 'SELECT * FROM Mail');
    Header.ToList.Clear;
    Header.ToList.Add(edTo.text); // Empfänger eintragen
    Header.CcList.Clear;
    Header.Subject := edBetreff.text;
 
    MIMEPart := AddPartMultipart('mixed', nil);
 
    AddPartText(MIMEText, MIMEPart);
    AddPartBinaryFromFile(cPDF, MIMEPart);
 
    EncodeMessage;
 
    if SendToRaw(Header.From,
                 Header.ToList.CommaText,
                 cHOST,  // Host eintragen
                 Lines,
                 cUSER,   // Absender eintragen
                 cPasswort)     // Passwort eintragen
    then begin
      ShowMessage('E-mail gesendet.');
    end
    else
      ShowMessage('E-mail nicht gesendet');
  finally
    Free;
    MIMEText.Free;
  end;
  Close;
end;
 
 

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

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Michl »

Wie zwei Posts weiter oben geschrieben, versuche mal

Code: Alles auswählen

    AddPartText(MIMEText, MIMEPart);
durch

Code: Alles auswählen

    AddPartTextEx(MIMEText, MimePart, UTF_8, True, ME_8BIT);
zu ersetzen.

Code: Alles auswählen

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

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von TT73GP7 »

hmm

UTF_8 kennt er nicht
ich muss da doch einfach nur die lazutf8 einbinden oder?
weil das geht auch nicht :(

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

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von Michl »

Du musst

Code: Alles auswählen

uses ..., synachar;
von Synapse einbinden.

PS: Das Tool, was nirgends bei einer Installation von Lazarus bei mir fehlen darf ist Cody (zu finden in den Packages). Einmal installiert fügt es automatisch alle Anforderungen bei einem unbekannten Bezeichner hinzu (wenn dieser schon einmal gefunden wurde, Cody lernt mit). Bsp.:
- versuche dein Projekt zu kompilieren
- Fehlermeldung: Error: Identifier not found "UTF_8"
- Rechtsklick auf diese Fehlermeldung im Nachrichtenfenster
- im Popup "Zeige Cody-Verzeichnis für "UTF_8" " anklicken
- ersten Eintrag wählen
-> fertig ist der Salat

Code: Alles auswählen

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

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Synapse: UTF-8-kodierte E-Mails

Beitrag von TT73GP7 »

Michl hat geschrieben:Du musst

Code: Alles auswählen

uses ..., synachar;
von Synapse einbinden.

PS: Das Tool, was nirgends bei einer Installation von Lazarus bei mir fehlen darf ist Cody (zu finden in den Packages). Einmal installiert fügt es automatisch alle Anforderungen bei einem unbekannten Bezeichner hinzu (wenn dieser schon einmal gefunden wurde, Cody lernt mit). Bsp.:
- versuche dein Projekt zu kompilieren
- Fehlermeldung: Error: Identifier not found "UTF_8"
- Rechtsklick auf diese Fehlermeldung im Nachrichtenfenster
- im Popup "Zeige Cody-Verzeichnis für "UTF_8" " anklicken
- ersten Eintrag wählen
-> fertig ist der Salat



sowas gibt es?

alter spalter
weil ich habe so oft das problem das ich da was vergessen hab und so weiter :)
das muss ich gleich ausprobieren

ich danke dir

Antworten