Mails an GMX.de werden schlecht dargestellt

Hallo zusammen,

ich habe in meiner App eine Email-Funktion, welche einen HTML- und Plaintext versendet. Versendet wird per SecureSMPTSocket. Die versendeten Mails, welche mit einem Mailprogramm wie Apple Mail, Outlook oder Thunderbird abgerufen werden, sehen absolut so aus, wie es sein soll. Wird die Mail aber im Webmailer von GMX dargestellt, dann sieht sie wie falsch encodiert aus.

Beispiel Mailtext:
Hier ist dein persönlicher QR-Code für die Anmeldung bei deinem SchwimmkursÂ.

Auch im Mailbetreff sind diese Zeichen zu finden:
e.V. Zugangscode für Vorname Name

Ich habe nun schon versucht die Strings (BodyHTML und Plaintext) anders zu encodieren, das hatte keine Wirkung. Wie gesagt, exakt die gleiche Mail wird im Mailprogramm korrekt dargestellt.

Meine Mails enthalten auch ein Bild (inline) eines QR-Codes. Dieses wird immer korrekt dargestellt.

Kann mir jemand bei diesem Problem helfen? Bei GMX finde ich keine Konfigurationsmöglichkeiten…

Grüße, Andreas

Hallo Andreas,

welches Encoding haben denn die Strings? Es sollte wohl am besten ein Unicode-Encoding wie UTF-8 sein.

Viele Grüße
Thomas

Ja, genau so ist es. Ich habe auch schon die Strings mit .ConvertEncoding nach UTF8 zu bringen, hatte keinen Erfolg.

Und so ein String zeigt im Debugger auch korrekt an, dass er UTF-8 ist? Hast du einen Screen?

Steht denn das Encoding im Header?

ö ist ein ö kodiert als UTF-8 und gelesen als Latin1.

Zeigt UTF-8 an.

Ich habe auch das mal probiert, da Gemini mir das vorgeschlagen hat, keinen Erfolg.

Zeig doch bitte mal den Header der ausgehenden eMail.

Eigentlich ist, sofern die eMail alle notwendigen Angaben enthält, das darstellende Programm für die korrekte Darstellung verantwortlich, hier also GMX…

sollte sowas im mail header sein

Content-Transfer-Encoding: 8bit
Content-Type: text/html; charset="UTF-8"

und natuerlich der inhalt dann auch in utf-8

Ich bin etwas überfordert, ich weiß nicht recht, was ich wie liefern soll :thinking:

Hier ist der Code meiner Funktion zur Erstellung der Mail:

Private Function CreateMessage(person As classPerson, withQR As Boolean) As EmailMessage

// baut die Mail aus Text und QR-Code-Bild zusammen

Var pic As Picture = CreateQRPic(person)
Var email As New EmailMessage

If withQR Then ' soll ein QR-Code rein?
  Var emailAnhang As New EmailAttachment
  
  emailAnhang.Name = "qrpic.png"
  emailAnhang.ContentEncoding = "BASE64"
  emailAnhang.Data = EncodeBase64(pic.ToData(Picture.Formats.PNG), 76)
  email.Attachments.Add(emailAnhang)
End If

email.FromAddress = TFUsername.Text
email.Headers.AddHeader("Content-Transfer-Encoding", "8bit")
email.Headers.AddHeader("Content-Type", "text/html; charset=UTF-8")

email.Subject = UpdateMailTitle(person.Vorname, person.Nachname, person.Kursnummer) ' Strings in Mailtitel ersetzen

Var ptext As String = HTMLToPlainText(UpdateMailText(person.Vorname, person.Nachname, person.Kursnummer))
email.BodyPlainText = ptext

email.BodyHTML = UpdateMailText(person.Vorname, person.Nachname, person.Kursnummer) ' Strings im Mailtext ersetzen
email.AddRecipient(person.MailAdresse)

Return email

End Function

In den Funktionen Update… werden nur die Namen in den Strings ersetzt. Der Text für die Mail kommt aus einem RTEdit-Textfeld. Der Mailtitel ist ein normales Textfeld.

Wenn die Email einen Plain Text und einen Html Text hat, dann ist der Content-Type schon mal falsch. Die Email benötigt dann einen “multipart/alternative” Content-Type. Kann die Xojo Email-Klasse so etwas überhaupt erzeugen? Ich würde Dir vorschlagen, den Plain Text-Teil wegzulassen und nur Html zu verschicken.

Ja, das weglassen des Plaintextes hat geholfen. Nun wird der Mailtext ordentlich angezeigt. Der Mailtitel hingegen hat sich nicht verändert, weiterhin : SV13 e.V. Zugangscode für Andreas Gelezun

Gemini hat im Wesentlichen das hier vorgeschlagen:

Var mailsubject As String = UpdateMailTitle(person.Vorname, person.Nachname, person.Kursnummer)
mailsubject = mailsubject.DefineEncoding(Encodings.UTF8)
Var encodedSubject As String = "=?UTF-8?B?" + EncodeBase64(mailsubject, 0) + "?="
email.Subject = encodedSubject

Das funktioniert tatsächlich.