feat: per-message extra headers in the mail envelope
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
||||
"net/smtp"
|
||||
"net/textproto"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@@ -76,6 +77,11 @@ type message struct {
|
||||
Subject string
|
||||
HTML string
|
||||
Text string
|
||||
|
||||
// Headers are extra header lines for this one message, such as an
|
||||
// announcement's List-Unsubscribe pair. Keys and values are CR/LF-stripped
|
||||
// like every other header.
|
||||
Headers map[string]string
|
||||
}
|
||||
|
||||
// sendTemplate renders name against data and delivers the result.
|
||||
@@ -226,6 +232,14 @@ func (s Sender) envelope(m message) ([]byte, error) {
|
||||
b.WriteString("Message-ID: " + messageID(s.From) + "\r\n")
|
||||
b.WriteString("Subject: " + mime.QEncoding.Encode("utf-8", sanitizeHeader(m.Subject)) + "\r\n")
|
||||
b.WriteString("MIME-Version: 1.0\r\n")
|
||||
keys := make([]string, 0, len(m.Headers))
|
||||
for k := range m.Headers {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
b.WriteString(sanitizeHeader(k) + ": " + sanitizeHeader(m.Headers[k]) + "\r\n")
|
||||
}
|
||||
b.WriteString("Content-Type: multipart/alternative; boundary=" + w.Boundary() + "\r\n")
|
||||
b.WriteString("\r\n")
|
||||
b.WriteString(parts.String())
|
||||
|
||||
Reference in New Issue
Block a user