瀏覽代碼

Add support for custom e-mail headers per SMTP server

Kailash Nadh 5 年之前
父節點
當前提交
7a467a5a3b
共有 2 個文件被更改,包括 20 次插入6 次删除
  1. 4 0
      config.toml.sample
  2. 16 6
      internal/messenger/emailer.go

+ 4 - 0
config.toml.sample

@@ -116,6 +116,10 @@ max_idle = 10
         tls_enabled = true
         tls_skip_verify = false
 
+        # One or more optional custom headers to be attached to all e-mails
+        # sent from this SMTP server. Uncomment the line to enable.
+        # email_headers = { "X-Sender" = "listmonk", "X-Custom-Header" = "listmonk" }
+
     [smtp.postal]
         enabled = false
         host = "my.smtp.server2"

+ 16 - 6
internal/messenger/emailer.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"math/rand"
 	"net/smtp"
+	"net/textproto"
 
 	"github.com/jaytaylor/html2text"
 	"github.com/knadh/smtppool"
@@ -15,12 +16,13 @@ const emName = "email"
 // Server represents an SMTP server's credentials.
 type Server struct {
 	Name          string
-	Username      string `json:"username"`
-	Password      string `json:"password"`
-	AuthProtocol  string `json:"auth_protocol"`
-	EmailFormat   string `json:"email_format"`
-	TLSEnabled    bool   `json:"tls_enabled"`
-	TLSSkipVerify bool   `json:"tls_skip_verify"`
+	Username      string            `json:"username"`
+	Password      string            `json:"password"`
+	AuthProtocol  string            `json:"auth_protocol"`
+	EmailFormat   string            `json:"email_format"`
+	TLSEnabled    bool              `json:"tls_enabled"`
+	TLSSkipVerify bool              `json:"tls_skip_verify"`
+	EmailHeaders  map[string]string `json:"email_headers"`
 
 	// Rest of the options are embedded directly from the smtppool lib.
 	// The JSON tag is for config unmarshal to work.
@@ -128,6 +130,14 @@ func (e *Emailer) Push(fromAddr string, toAddr []string, subject string, m []byt
 		Attachments: files,
 	}
 
+	// If there are custom e-mail headers, attach them.
+	if len(srv.EmailHeaders) > 0 {
+		em.Headers = textproto.MIMEHeader{}
+		for k, v := range srv.EmailHeaders {
+			em.Headers.Set(k, v)
+		}
+	}
+
 	switch srv.EmailFormat {
 	case "html":
 		em.HTML = m