From 5bd340392867561b9703c9891a3d66f114157daf Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 4 Jan 2023 00:04:07 +0100 Subject: [PATCH] fix: display german umlauts correctly in emails --- modules/escaper/escaper.go | 16 ++++++++++++++++ modules/structs/mail.go | 13 +++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 modules/escaper/escaper.go diff --git a/modules/escaper/escaper.go b/modules/escaper/escaper.go new file mode 100644 index 0000000..54fb55b --- /dev/null +++ b/modules/escaper/escaper.go @@ -0,0 +1,16 @@ +package escaper + +import "strings" + +var htmlEntitesEscaper = strings.NewReplacer( + `Ä`, "Ä", + `ä`, "ä", + `Ö`, "Ö", + `ö`, "ö", + `Ü`, "Ü", + `ü`, "ü", +) + +func EscapeHtmlEntites(s string) string { + return htmlEntitesEscaper.Replace(s) +} diff --git a/modules/structs/mail.go b/modules/structs/mail.go index d933dab..58624f0 100644 --- a/modules/structs/mail.go +++ b/modules/structs/mail.go @@ -2,12 +2,14 @@ package structs import ( "bytes" + "encoding/base64" "html/template" "net/smtp" "strings" "clickandjoin.app/emailserver/modules/cache" "clickandjoin.app/emailserver/modules/config" + "clickandjoin.app/emailserver/modules/escaper" "github.com/sirupsen/logrus" ) @@ -70,10 +72,21 @@ func (m *Mail) RenderTemplate() (string, error) { v = value[config.Cfg.DefaultLanguageCode] } + // escaping so that umlauts are displayed correctly + if m.LanguageId == "de" { + v = escaper.EscapeHtmlEntites(v) + } + body = []byte(strings.Replace(string(body), "%"+key+"%", v, -1)) } } + // The subject line of an email is an independent header and utf 8 must be set for it + // https://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/ + if m.LanguageId == "de" { + m.Subject = "=?utf-8?B?" + base64.StdEncoding.EncodeToString([]byte(m.Subject)) + "?=" + } + t := template.Must(template.New("").Parse(string(body))) buf := new(bytes.Buffer)