mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-23 14:10:50 +01:00
Add new Send function to client.go and remove duplicates
The new Send function in client.go adds thread safety by using a mutex. This change also removes duplicate Send functions from client_119.go and client_120.go, consolidating the logic in one place for easier maintenance.
This commit is contained in:
parent
3e504e6338
commit
3553b65769
3 changed files with 17 additions and 11 deletions
|
@ -1108,6 +1108,12 @@ func (c *Client) DialAndSendWithContext(ctx context.Context, messages ...*Msg) e
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Send(messages ...*Msg) (returnErr error) {
|
||||||
|
c.sendMutex.Lock()
|
||||||
|
defer c.sendMutex.Unlock()
|
||||||
|
return c.SendWithSMTPClient(c.smtpClient, messages...)
|
||||||
|
}
|
||||||
|
|
||||||
// auth attempts to authenticate the client using SMTP AUTH mechanisms. It checks the connection,
|
// auth attempts to authenticate the client using SMTP AUTH mechanisms. It checks the connection,
|
||||||
// determines the supported authentication methods, and applies the appropriate authentication
|
// determines the supported authentication methods, and applies the appropriate authentication
|
||||||
// type. An error is returned if authentication fails.
|
// type. An error is returned if authentication fails.
|
||||||
|
|
|
@ -7,7 +7,11 @@
|
||||||
|
|
||||||
package mail
|
package mail
|
||||||
|
|
||||||
import "errors"
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/wneessen/go-mail/smtp"
|
||||||
|
)
|
||||||
|
|
||||||
// Send attempts to send one or more Msg using the Client connection to the SMTP server.
|
// Send attempts to send one or more Msg using the Client connection to the SMTP server.
|
||||||
// If the Client has no active connection to the server, Send will fail with an error. For each
|
// If the Client has no active connection to the server, Send will fail with an error. For each
|
||||||
|
@ -26,12 +30,13 @@ import "errors"
|
||||||
// Returns:
|
// Returns:
|
||||||
// - An error that represents the sending result, which may include multiple SendErrors if
|
// - An error that represents the sending result, which may include multiple SendErrors if
|
||||||
// any occurred; otherwise, returns nil.
|
// any occurred; otherwise, returns nil.
|
||||||
func (c *Client) Send(messages ...*Msg) error {
|
|
||||||
|
func (c *Client) SendWithSMTPClient(client *smtp.Client, messages ...*Msg) error {
|
||||||
escSupport := false
|
escSupport := false
|
||||||
if c.smtpClient != nil {
|
if client != nil {
|
||||||
escSupport, _ = c.smtpClient.Extension("ENHANCEDSTATUSCODES")
|
escSupport, _ = client.Extension("ENHANCEDSTATUSCODES")
|
||||||
}
|
}
|
||||||
if err := c.checkConn(); err != nil {
|
if err := c.checkConn(client); err != nil {
|
||||||
return &SendError{
|
return &SendError{
|
||||||
Reason: ErrConnCheck, errlist: []error{err}, isTemp: isTempError(err),
|
Reason: ErrConnCheck, errlist: []error{err}, isTemp: isTempError(err),
|
||||||
errcode: errorCode(err), enhancedStatusCode: enhancedStatusCode(err, escSupport),
|
errcode: errorCode(err), enhancedStatusCode: enhancedStatusCode(err, escSupport),
|
||||||
|
@ -39,7 +44,7 @@ func (c *Client) Send(messages ...*Msg) error {
|
||||||
}
|
}
|
||||||
var errs []*SendError
|
var errs []*SendError
|
||||||
for id, message := range messages {
|
for id, message := range messages {
|
||||||
if sendErr := c.sendSingleMsg(message); sendErr != nil {
|
if sendErr := c.sendSingleMsg(client, message); sendErr != nil {
|
||||||
messages[id].sendError = sendErr
|
messages[id].sendError = sendErr
|
||||||
|
|
||||||
var msgSendErr *SendError
|
var msgSendErr *SendError
|
||||||
|
|
|
@ -28,11 +28,6 @@ import (
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// - An error that aggregates any SendErrors encountered during the sending process; otherwise, returns nil.
|
// - An error that aggregates any SendErrors encountered during the sending process; otherwise, returns nil.
|
||||||
func (c *Client) Send(messages ...*Msg) (returnErr error) {
|
|
||||||
c.sendMutex.Lock()
|
|
||||||
defer c.sendMutex.Unlock()
|
|
||||||
return c.SendWithSMTPClient(c.smtpClient, messages...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) SendWithSMTPClient(client *smtp.Client, messages ...*Msg) (returnErr error) {
|
func (c *Client) SendWithSMTPClient(client *smtp.Client, messages ...*Msg) (returnErr error) {
|
||||||
escSupport := false
|
escSupport := false
|
||||||
|
|
Loading…
Reference in a new issue