Browse Source

Flip title and message if message is empty

Philipp Heckel 3 years ago
parent
commit
04719f8dee
2 changed files with 38 additions and 1 deletions
  1. 6 1
      server/smtp_server.go
  2. 32 0
      server/smtp_server_test.go

+ 6 - 1
server/smtp_server.go

@@ -110,11 +110,12 @@ func (s *smtpSession) Data(r io.Reader) error {
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
+		body = strings.TrimSpace(body)
 		if len(body) > conf.MessageLimit {
 		if len(body) > conf.MessageLimit {
 			body = body[:conf.MessageLimit]
 			body = body[:conf.MessageLimit]
 		}
 		}
 		m := newDefaultMessage(s.topic, body)
 		m := newDefaultMessage(s.topic, body)
-		subject := msg.Header.Get("Subject")
+		subject := strings.TrimSpace(msg.Header.Get("Subject"))
 		if subject != "" {
 		if subject != "" {
 			dec := mime.WordDecoder{}
 			dec := mime.WordDecoder{}
 			subject, err := dec.DecodeHeader(subject)
 			subject, err := dec.DecodeHeader(subject)
@@ -123,6 +124,10 @@ func (s *smtpSession) Data(r io.Reader) error {
 			}
 			}
 			m.Title = subject
 			m.Title = subject
 		}
 		}
+		if m.Title != "" && m.Message == "" {
+			m.Message = m.Title // Flip them, this makes more sense
+			m.Title = ""
+		}
 		if err := s.backend.sub(m); err != nil {
 		if err := s.backend.sub(m); err != nil {
 			return err
 			return err
 		}
 		}

+ 32 - 0
server/smtp_server_test.go

@@ -39,6 +39,38 @@ Content-Type: text/html; charset="UTF-8"
 	require.Nil(t, session.Data(strings.NewReader(email)))
 	require.Nil(t, session.Data(strings.NewReader(email)))
 }
 }
 
 
+func TestSmtpBackend_MultipartNoBody(t *testing.T) {
+	email := `MIME-Version: 1.0
+Date: Tue, 28 Dec 2021 01:33:34 +0100
+Message-ID: <CAAvm7ABCDsi9vsuu0WTRXzZQBC8dXrDOLT8iCWdqrsmg@mail.gmail.com>
+Subject: This email has a subject but no body
+From: Phil <phil@example.com>
+To: ntfy-emailtest@ntfy.sh
+Content-Type: multipart/alternative; boundary="000000000000bcf4a405d429f8d4"
+
+--000000000000bcf4a405d429f8d4
+Content-Type: text/plain; charset="UTF-8"
+
+
+
+--000000000000bcf4a405d429f8d4
+Content-Type: text/html; charset="UTF-8"
+
+<div dir="ltr"><br></div>
+
+--000000000000bcf4a405d429f8d4--`
+	_, backend := newTestBackend(t, func(m *message) error {
+		require.Equal(t, "emailtest", m.Topic)
+		require.Equal(t, "", m.Title) // We flipped message and body
+		require.Equal(t, "This email has a subject but no body", m.Message)
+		return nil
+	})
+	session, _ := backend.AnonymousLogin(nil)
+	require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{}))
+	require.Nil(t, session.Rcpt("ntfy-emailtest@ntfy.sh"))
+	require.Nil(t, session.Data(strings.NewReader(email)))
+}
+
 func TestSmtpBackend_Plaintext(t *testing.T) {
 func TestSmtpBackend_Plaintext(t *testing.T) {
 	email := `Date: Tue, 28 Dec 2021 00:30:10 +0100
 	email := `Date: Tue, 28 Dec 2021 00:30:10 +0100
 Message-ID: <CAAvm79YP0C=Rt1N=KWmSUBB87KK2rRChmdzKqF1vCwMEUiVzLQ@mail.gmail.com>
 Message-ID: <CAAvm79YP0C=Rt1N=KWmSUBB87KK2rRChmdzKqF1vCwMEUiVzLQ@mail.gmail.com>