From 872b08e5da244dd94a57f1decdd2c4a72387b172 Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Wed, 13 Aug 2025 18:54:56 +0800 Subject: [PATCH] fix(smtp): force enabling SSL does not work (#2777) --- pkg/email/smtp.go | 16 ++++++++-------- service/admin/tools.go | 15 ++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/email/smtp.go b/pkg/email/smtp.go index b9fcda8..b9ce863 100644 --- a/pkg/email/smtp.go +++ b/pkg/email/smtp.go @@ -121,17 +121,17 @@ func (client *SMTPPool) Init() { } }() - tlsPolicy := mail.TLSOpportunistic + opts := []mail.Option{ + mail.WithPort(client.config.Port), + mail.WithTimeout(time.Duration(client.config.Keepalive+5) * time.Second), + mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), mail.WithTLSPortPolicy(mail.TLSOpportunistic), + mail.WithUsername(client.config.User), mail.WithPassword(client.config.Password), + } if client.config.ForceEncryption { - tlsPolicy = mail.TLSMandatory + opts = append(opts, mail.WithSSL()) } - d, diaErr := mail.NewClient(client.config.Host, - mail.WithPort(client.config.Port), - mail.WithTimeout(time.Duration(client.config.Keepalive+5)*time.Second), - mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), mail.WithTLSPortPolicy(tlsPolicy), - mail.WithUsername(client.config.User), mail.WithPassword(client.config.Password), - ) + d, diaErr := mail.NewClient(client.config.Host, opts...) if diaErr != nil { client.l.Panic("Failed to create SMTP client: %s", diaErr) return diff --git a/service/admin/tools.go b/service/admin/tools.go index 8bea48d..e13e3a7 100644 --- a/service/admin/tools.go +++ b/service/admin/tools.go @@ -139,15 +139,16 @@ func (s *TestSMTPService) Test(c *gin.Context) error { return serializer.NewError(serializer.CodeParamErr, "Invalid SMTP port", err) } - tlsPolicy := mail.TLSOpportunistic - if setting.IsTrueValue(s.Settings["smtpEncryption"]) { - tlsPolicy = mail.TLSMandatory - } - d, diaErr := mail.NewClient(s.Settings["smtpHost"], + opts := []mail.Option{ mail.WithPort(port), - mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), mail.WithTLSPortPolicy(tlsPolicy), + mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), mail.WithTLSPortPolicy(mail.TLSOpportunistic), mail.WithUsername(s.Settings["smtpUser"]), mail.WithPassword(s.Settings["smtpPass"]), - ) + } + if setting.IsTrueValue(s.Settings["smtpEncryption"]) { + opts = append(opts, mail.WithSSL()) + } + + d, diaErr := mail.NewClient(s.Settings["smtpHost"], opts...) if diaErr != nil { return serializer.NewError(serializer.CodeInternalSetting, "Failed to create SMTP client: "+diaErr.Error(), diaErr) }