diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9c26cf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/go.work diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8675b04 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/helays/gomail/v2 + + +require ( + golang.org/x/net v0.44.0 + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc + gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df +) diff --git a/smtp.go b/smtp.go index 2aa49c8..6729fa2 100644 --- a/smtp.go +++ b/smtp.go @@ -8,6 +8,8 @@ import ( "net/smtp" "strings" "time" + + "golang.org/x/net/proxy" ) // A Dialer is a dialer to an SMTP server. @@ -33,6 +35,7 @@ type Dialer struct { // LocalName is the hostname sent to the SMTP server with the HELO command. // By default, "localhost" is sent. LocalName string + Dialer proxy.Dialer } // NewDialer returns a new SMTP Dialer. The given parameters are used to connect @@ -58,7 +61,16 @@ func NewPlainDialer(host string, port int, username, password string) *Dialer { // Dial dials and authenticates to an SMTP server. The returned SendCloser // should be closed when done using it. func (d *Dialer) Dial() (SendCloser, error) { - conn, err := netDialTimeout("tcp", addr(d.Host, d.Port), 10*time.Second) + var ( + conn net.Conn + err error + ) + if d.Dialer != nil { + conn, err = d.Dialer.Dial("tcp", addr(d.Host, d.Port)) + } else { + conn, err = netDialTimeout("tcp", addr(d.Host, d.Port), 10*time.Second) + } + if err != nil { return nil, err } @@ -80,7 +92,7 @@ func (d *Dialer) Dial() (SendCloser, error) { if !d.SSL { if ok, _ := c.Extension("STARTTLS"); ok { - if err := c.StartTLS(d.tlsConfig()); err != nil { + if err = c.StartTLS(d.tlsConfig()); err != nil { c.Close() return nil, err }