refactor(mail): migrate to wneessen/go-mail (#2738)

This commit is contained in:
Aaron Liu
2025-08-10 10:40:21 +08:00
parent 4c08644b05
commit 8688069fac
5 changed files with 104 additions and 54 deletions

View File

@@ -5,6 +5,8 @@ import (
"net/http"
"strconv"
"github.com/cloudreve/Cloudreve/v4/inventory/types"
"github.com/cloudreve/Cloudreve/v4/application/dependency"
"github.com/cloudreve/Cloudreve/v4/pkg/boolset"
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/manager"
@@ -12,9 +14,8 @@ import (
"github.com/cloudreve/Cloudreve/v4/pkg/serializer"
"github.com/cloudreve/Cloudreve/v4/pkg/setting"
"github.com/cloudreve/Cloudreve/v4/pkg/wopi"
"github.com/cloudreve/Cloudreve/v4/inventory/types"
"github.com/gin-gonic/gin"
"github.com/go-mail/mail"
"github.com/wneessen/go-mail"
)
type (
@@ -138,26 +139,30 @@ func (s *TestSMTPService) Test(c *gin.Context) error {
return serializer.NewError(serializer.CodeParamErr, "Invalid SMTP port", err)
}
d := mail.NewDialer(s.Settings["smtpHost"], port, s.Settings["smtpUser"], s.Settings["smtpPass"])
d.SSL = false
tlsPolicy := mail.TLSOpportunistic
if setting.IsTrueValue(s.Settings["smtpEncryption"]) {
d.SSL = true
tlsPolicy = mail.TLSMandatory
}
d.StartTLSPolicy = mail.OpportunisticStartTLS
sender, err := d.Dial()
if err != nil {
return serializer.NewError(serializer.CodeInternalSetting, "Failed to connect to SMTP server: "+err.Error(), err)
d, diaErr := mail.NewClient(s.Settings["smtpHost"],
mail.WithPort(port),
mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), mail.WithTLSPortPolicy(tlsPolicy),
mail.WithUsername(s.Settings["smtpUser"]), mail.WithPassword(s.Settings["smtpPass"]),
)
if diaErr != nil {
return serializer.NewError(serializer.CodeInternalSetting, "Failed to create SMTP client: "+diaErr.Error(), diaErr)
}
m := mail.NewMessage()
m.SetHeader("From", s.Settings["fromAdress"])
m.SetAddressHeader("Reply-To", s.Settings["replyTo"], s.Settings["fromName"])
m.SetHeader("To", s.To)
m.SetHeader("Subject", "Cloudreve SMTP Test")
m.SetBody("text/plain", "This is a test email from Cloudreve.")
m := mail.NewMsg()
if err := m.FromFormat(s.Settings["fromName"], s.Settings["fromAdress"]); err != nil {
return serializer.NewError(serializer.CodeInternalSetting, "Failed to set FROM address: "+err.Error(), err)
}
m.ReplyToFormat(s.Settings["fromName"], s.Settings["replyTo"])
m.To(s.To)
m.Subject("Cloudreve SMTP Test")
m.SetMessageID()
m.SetBodyString(mail.TypeTextHTML, "This is a test email from Cloudreve.")
err = mail.Send(sender, m)
err = d.DialAndSendWithContext(c, m)
if err != nil {
return serializer.NewError(serializer.CodeInternalSetting, "Failed to send test email: "+err.Error(), err)
}