From 0239318d949d6412bae106ca90ce4ebf8846b0b3 Mon Sep 17 00:00:00 2001 From: Winni Neessen Date: Thu, 19 Sep 2024 12:09:23 +0200 Subject: [PATCH] Add affectedMsg field to SendError struct Included the affected message in the SendError struct for better error tracking and debugging. This enhancement ensures that any errors encountered during the sending process can be directly associated with the specific message that caused them. --- client.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/client.go b/client.go index 56a82a3..f8519b4 100644 --- a/client.go +++ b/client.go @@ -793,7 +793,7 @@ func (c *Client) auth() error { func (c *Client) sendSingleMsg(message *Msg) error { if message.encoding == NoEncoding { if ok, _ := c.smtpClient.Extension("8BITMIME"); !ok { - return &SendError{Reason: ErrNoUnencoded, isTemp: false} + return &SendError{Reason: ErrNoUnencoded, isTemp: false, affectedMsg: message} } } from, err := message.GetSender(false) @@ -813,14 +813,15 @@ func (c *Client) sendSingleMsg(message *Msg) error { } } if err = c.smtpClient.Mail(from); err != nil { - retError := &SendError{Reason: ErrSMTPMailFrom, errlist: []error{err}, isTemp: isTempError(err)} + retError := &SendError{Reason: ErrSMTPMailFrom, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} if resetSendErr := c.smtpClient.Reset(); resetSendErr != nil { retError.errlist = append(retError.errlist, resetSendErr) } return retError } hasError := false - rcptSendErr := &SendError{} + rcptSendErr := &SendError{affectedMsg: message} rcptSendErr.errlist = make([]error, 0) rcptSendErr.rcpt = make([]string, 0) rcptNotifyOpt := strings.Join(c.dsnrntype, ",") @@ -842,23 +843,28 @@ func (c *Client) sendSingleMsg(message *Msg) error { } writer, err := c.smtpClient.Data() if err != nil { - return &SendError{Reason: ErrSMTPData, errlist: []error{err}, isTemp: isTempError(err)} + return &SendError{Reason: ErrSMTPData, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} } _, err = message.WriteTo(writer) if err != nil { - return &SendError{Reason: ErrWriteContent, errlist: []error{err}, isTemp: isTempError(err)} + return &SendError{Reason: ErrWriteContent, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} } message.isDelivered = true if err = writer.Close(); err != nil { - return &SendError{Reason: ErrSMTPDataClose, errlist: []error{err}, isTemp: isTempError(err)} + return &SendError{Reason: ErrSMTPDataClose, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} } if err = c.Reset(); err != nil { - return &SendError{Reason: ErrSMTPReset, errlist: []error{err}, isTemp: isTempError(err)} + return &SendError{Reason: ErrSMTPReset, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} } if err = c.checkConn(); err != nil { - return &SendError{Reason: ErrConnCheck, errlist: []error{err}, isTemp: isTempError(err)} + return &SendError{Reason: ErrConnCheck, errlist: []error{err}, isTemp: isTempError(err), + affectedMsg: message} } return nil }