Fix santa bug, email subject encoding, closes #65

This commit is contained in:
Philipp Heckel 2021-12-26 14:34:25 +01:00
parent 9a0f1f22b8
commit ec7e58a6a2
2 changed files with 20 additions and 17 deletions

View file

@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"heckel.io/ntfy/util" "heckel.io/ntfy/util"
"mime"
"net" "net"
"net/smtp" "net/smtp"
"strings" "strings"
@ -28,6 +29,7 @@ func (s *smtpMailer) Send(senderIP, to string, m *message) error {
if err != nil { if err != nil {
return err return err
} }
println(message)
auth := smtp.PlainAuth("", s.config.SMTPUser, s.config.SMTPPass, host) auth := smtp.PlainAuth("", s.config.SMTPUser, s.config.SMTPPass, host)
return smtp.SendMail(s.config.SMTPAddr, auth, s.config.SMTPFrom, []string{to}, []byte(message)) return smtp.SendMail(s.config.SMTPAddr, auth, s.config.SMTPFrom, []string{to}, []byte(message))
} }
@ -66,10 +68,11 @@ func formatMail(baseURL, senderIP, from, to string, m *message) (string, error)
if trailer != "" { if trailer != "" {
message += "\n\n" + trailer message += "\n\n" + trailer
} }
body := `Content-Type: text/plain; charset="utf-8" subject = mime.BEncoding.Encode("utf-8", subject)
From: "{shortTopicURL}" <{from}> body := `From: "{shortTopicURL}" <{from}>
To: {to} To: {to}
Subject: {subject} Subject: {subject}
Content-Type: text/plain; charset="utf-8"
{message} {message}

View file

@ -13,10 +13,10 @@ func TestFormatMail_Basic(t *testing.T) {
Topic: "alerts", Topic: "alerts",
Message: "A simple message", Message: "A simple message",
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: A simple message Subject: A simple message
Content-Type: text/plain; charset="utf-8"
A simple message A simple message
@ -34,10 +34,10 @@ func TestFormatMail_JustEmojis(t *testing.T) {
Message: "A simple message", Message: "A simple message",
Tags: []string{"grinning"}, Tags: []string{"grinning"},
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: 😀 A simple message Subject: =?utf-8?b?8J+YgCBBIHNpbXBsZSBtZXNzYWdl?=
Content-Type: text/plain; charset="utf-8"
A simple message A simple message
@ -55,10 +55,10 @@ func TestFormatMail_JustOtherTags(t *testing.T) {
Message: "A simple message", Message: "A simple message",
Tags: []string{"not-an-emoji"}, Tags: []string{"not-an-emoji"},
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: A simple message Subject: A simple message
Content-Type: text/plain; charset="utf-8"
A simple message A simple message
@ -78,10 +78,10 @@ func TestFormatMail_JustPriority(t *testing.T) {
Message: "A simple message", Message: "A simple message",
Priority: 2, Priority: 2,
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: A simple message Subject: A simple message
Content-Type: text/plain; charset="utf-8"
A simple message A simple message
@ -101,10 +101,10 @@ func TestFormatMail_UTF8Subject(t *testing.T) {
Message: "A simple message", Message: "A simple message",
Title: " :: A not so simple title öäüß ¡Hola, señor!", Title: " :: A not so simple title öäüß ¡Hola, señor!",
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: :: A not so simple title öäüß ¡Hola, señor! Subject: =?utf-8?b?IDo6IEEgbm90IHNvIHNpbXBsZSB0aXRsZSDDtsOkw7zDnyDCoUhvbGEsIHNl?= =?utf-8?b?w7FvciE=?=
Content-Type: text/plain; charset="utf-8"
A simple message A simple message
@ -124,10 +124,10 @@ func TestFormatMail_WithAllTheThings(t *testing.T) {
Title: "Oh no 🙈\nThis is a message across\nmultiple lines", Title: "Oh no 🙈\nThis is a message across\nmultiple lines",
Message: "A message that contains monkeys 🙉\nNo really, though. Monkeys!", Message: "A message that contains monkeys 🙉\nNo really, though. Monkeys!",
}) })
expected := `Content-Type: text/plain; charset="utf-8" expected := `From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
From: "ntfy.sh/alerts" <ntfy@ntfy.sh>
To: phil@example.com To: phil@example.com
Subject: 💀 Oh no 🙈 This is a message across multiple lines Subject: =?utf-8?b?4pqg77iPIPCfkoAgT2ggbm8g8J+ZiCBUaGlzIGlzIGEgbWVzc2FnZSBhY3Jv?= =?utf-8?b?c3MgbXVsdGlwbGUgbGluZXM=?=
Content-Type: text/plain; charset="utf-8"
A message that contains monkeys 🙉 A message that contains monkeys 🙉
No really, though. Monkeys! No really, though. Monkeys!