mirror of https://github.com/cloudreve/Cloudreve
fix(smtp): SMTP reset error should be ignored for non-standard SMTP server implementation (#2791)
parent
872b08e5da
commit
a1ce16bd5e
2
assets
2
assets
|
@ -1 +1 @@
|
||||||
Subproject commit f7aa0a09e22792eeeae574b585a499f0f459cede
|
Subproject commit 2c5b89c59cd69a7690938f4a980468006b49b547
|
|
@ -2,6 +2,7 @@ package email
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -159,6 +160,16 @@ func (client *SMTPPool) Init() {
|
||||||
|
|
||||||
l := client.l.CopyWithPrefix(fmt.Sprintf("[Cid: %s]", m.cid))
|
l := client.l.CopyWithPrefix(fmt.Sprintf("[Cid: %s]", m.cid))
|
||||||
if err := d.Send(m.msg); err != nil {
|
if err := d.Send(m.msg); err != nil {
|
||||||
|
// Check if this is an SMTP RESET error after successful delivery
|
||||||
|
var sendErr *mail.SendError
|
||||||
|
var errParsed = errors.As(err, &sendErr)
|
||||||
|
if errParsed && sendErr.Reason == mail.ErrSMTPReset {
|
||||||
|
open = false
|
||||||
|
l.Debug("SMTP RESET error, closing connection...")
|
||||||
|
// https://github.com/wneessen/go-mail/issues/463
|
||||||
|
continue // Don't treat this as a delivery failure since mail was sent
|
||||||
|
}
|
||||||
|
|
||||||
l.Warning("Failed to send email: %s, Cid=%s", err, m.cid)
|
l.Warning("Failed to send email: %s, Cid=%s", err, m.cid)
|
||||||
} else {
|
} else {
|
||||||
l.Info("Email sent to %q, title: %q.", m.to, m.subject)
|
l.Info("Email sent to %q, title: %q.", m.to, m.subject)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
@ -165,6 +166,13 @@ func (s *TestSMTPService) Test(c *gin.Context) error {
|
||||||
|
|
||||||
err = d.DialAndSendWithContext(c, m)
|
err = d.DialAndSendWithContext(c, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// Check if this is an SMTP RESET error after successful delivery
|
||||||
|
var sendErr *mail.SendError
|
||||||
|
var errParsed = errors.As(err, &sendErr)
|
||||||
|
if errParsed && sendErr.Reason == mail.ErrSMTPReset {
|
||||||
|
return nil // Don't treat this as a delivery failure since mail was sent
|
||||||
|
}
|
||||||
|
|
||||||
return serializer.NewError(serializer.CodeInternalSetting, "Failed to send test email: "+err.Error(), err)
|
return serializer.NewError(serializer.CodeInternalSetting, "Failed to send test email: "+err.Error(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue