From 4286bc532c29f2dc08de6b42e8989b733e0b2f7a Mon Sep 17 00:00:00 2001 From: smail Date: Sat, 17 Oct 2026 17:12:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=96=E5=8F=91=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=A2=9E=E5=8A=A0List-Unsubscribe=E6=A0=87=E5=A4=B4?= =?UTF-8?q?=E5=B9=B6=E5=8D=87=E7=BA=A7=E8=87=B3V2.11.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dto/parsemail/email.go | 18 ++++++++++++++++++ backend/services/verification/delivery.go | 3 ++- .../views/components/HomeAside/HomeAside.vue | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/backend/dto/parsemail/email.go b/backend/dto/parsemail/email.go index 20ec0df8..6d9ac21a 100644 --- a/backend/dto/parsemail/email.go +++ b/backend/dto/parsemail/email.go @@ -678,6 +678,15 @@ func (e *Email) ForwardBuildBytes(ctx *context.Context, sender *models.User, for h.Set("In-Reply-To", fmt.Sprintf("<%s>", e.MsgID)) } + unsubDomain := cfg.Domain + if len(cfg.Domains) > 0 && cfg.Domains[0] != "" { + unsubDomain = cfg.Domains[0] + } + if unsubDomain != "" { + h.Set("List-Unsubscribe", fmt.Sprintf("", unsubDomain)) + h.Set("List-Unsubscribe-Post", "List-Unsubscribe=One-Click") + } + // Create a new mail writer mw, err := mail.CreateWriter(&b, h) if err != nil { @@ -882,6 +891,15 @@ func (e *Email) BuildBytes(ctx *context.Context, dkim bool) ([]byte, error) { h.SetAddressList("Cc", cc) } + unsubDomain := cfg.Domain + if len(cfg.Domains) > 0 && cfg.Domains[0] != "" { + unsubDomain = cfg.Domains[0] + } + if unsubDomain != "" { + h.Set("List-Unsubscribe", fmt.Sprintf("", unsubDomain)) + h.Set("List-Unsubscribe-Post", "List-Unsubscribe=One-Click") + } + // Create a new mail writer mw, err := mail.CreateWriter(&b, h) if err != nil { diff --git a/backend/services/verification/delivery.go b/backend/services/verification/delivery.go index e9c11d63..d82e85bb 100644 --- a/backend/services/verification/delivery.go +++ b/backend/services/verification/delivery.go @@ -219,10 +219,11 @@ func buildCodeMessage(from string, challenge Challenge, code string) []byte { htmlBody := CodeHTML(challenge, code) return []byte(fmt.Sprintf( - "From: %s\r\nTo: %s\r\nSubject: %s\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary=\"%s\"\r\n\r\n--%s\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%s\r\n--%s\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%s\r\n--%s--\r\n", + "From: %s\r\nTo: %s\r\nSubject: %s\r\nList-Unsubscribe: \r\nList-Unsubscribe-Post: List-Unsubscribe=One-Click\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary=\"%s\"\r\n\r\n--%s\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%s\r\n--%s\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%s\r\n--%s--\r\n", from, challenge.Email, mime.QEncoding.Encode("UTF-8", title), + strings.TrimSpace(strings.Split(from, "@")[len(strings.Split(from, "@"))-1]), boundary, boundary, text, diff --git a/frontend/src/views/components/HomeAside/HomeAside.vue b/frontend/src/views/components/HomeAside/HomeAside.vue index cfed6394..6513d34a 100644 --- a/frontend/src/views/components/HomeAside/HomeAside.vue +++ b/frontend/src/views/components/HomeAside/HomeAside.vue @@ -57,7 +57,7 @@ {{ lang.settings }} - V2.11.0 + V2.11.1