From df44f7fbbb97b4536af3dc8032fbeb7ba9d11ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Mon, 2 Jan 2023 09:47:55 +0100 Subject: [PATCH] fix: include mime version and message id headers (resolve #36) --- types/mail.go | 21 +++++++++++++++------ types/mail_address.go | 13 ++++++++++++- version.txt | 2 +- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/types/mail.go b/types/mail.go index 5d22d97..e8823b9 100644 --- a/types/mail.go +++ b/types/mail.go @@ -2,6 +2,7 @@ package types import ( "fmt" + "github.com/google/uuid" "strings" "time" ) @@ -12,12 +13,13 @@ const ( ) type Mail struct { - From MailAddress - To MailAddresses - Subject string - Body string - Type string - Date time.Time + From MailAddress + To MailAddresses + Subject string + Body string + Type string + Date time.Time + MessageID string } func (m *Mail) WithText(text string) *Mail { @@ -39,6 +41,9 @@ func (m *Mail) Sanitized() *Mail { if m.Date.IsZero() { m.Date = time.Now() } + if m.MessageID == "" { + m.MessageID = fmt.Sprintf("<%s@%s>", uuid.New().String(), m.From.Domain()) + } return m } @@ -46,13 +51,17 @@ func (m *Mail) String() string { return fmt.Sprintf("To: %s\r\n"+ "From: %s\r\n"+ "Subject: %s\r\n"+ + "Message-ID: %s\r\n"+ + "MIME-Version: 1.0\r\n"+ "Content-Type: %s\r\n"+ + "Content-Transfer-Encoding: 8bit\r\n"+ "Date: %s\r\n"+ "\r\n"+ "%s\r\n", strings.Join(m.To.Strings(), ", "), m.From.String(), m.Subject, + m.MessageID, m.Type, m.Date.Format(time.RFC1123Z), m.Body, diff --git a/types/mail_address.go b/types/mail_address.go index a1f0ed6..693f492 100644 --- a/types/mail_address.go +++ b/types/mail_address.go @@ -1,6 +1,9 @@ package types -import "regexp" +import ( + "regexp" + "strings" +) const ( MailPattern = "[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+" @@ -41,6 +44,14 @@ func (m MailAddress) Raw() string { return "" } +func (m MailAddress) Domain() string { + split := strings.Split(m.Raw(), "@") + if len(split) != 2 { + return "" + } + return split[1] +} + func (m MailAddress) Valid() bool { return emailAddrRegex.Match([]byte(m)) } diff --git a/version.txt b/version.txt index ed0d9e9..3f8dcd0 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.13.1 \ No newline at end of file +0.13.2 \ No newline at end of file