|
@@ -55,17 +55,18 @@ type Client struct {
|
55
|
55
|
|
56
|
56
|
// Dial returns a new Client connected to an SMTP server at addr.
|
57
|
57
|
// The addr must include a port, as in "mail.example.com:smtp".
|
58
|
|
-func Dial(addr string, timeout time.Duration, implicitTLS bool) (*Client, error) {
|
|
58
|
+func Dial(protocol, addr string, localAddress net.Addr, timeout time.Duration, implicitTLS bool) (*Client, error) {
|
59
|
59
|
var conn net.Conn
|
60
|
60
|
var err error
|
61
|
61
|
dialer := net.Dialer{
|
62
|
|
- Timeout: timeout,
|
|
62
|
+ Timeout: timeout,
|
|
63
|
+ LocalAddr: localAddress,
|
63
|
64
|
}
|
64
|
65
|
start := time.Now()
|
65
|
66
|
if !implicitTLS {
|
66
|
|
- conn, err = dialer.Dial("tcp", addr)
|
|
67
|
+ conn, err = dialer.Dial(protocol, addr)
|
67
|
68
|
} else {
|
68
|
|
- conn, err = tls.DialWithDialer(&dialer, "tcp", addr, nil)
|
|
69
|
+ conn, err = tls.DialWithDialer(&dialer, protocol, addr, nil)
|
69
|
70
|
}
|
70
|
71
|
if err != nil {
|
71
|
72
|
return nil, err
|
|
@@ -341,7 +342,7 @@ var testHookStartTLS func(*tls.Config) // nil, except for tests
|
341
|
342
|
// functionality. Higher-level packages exist outside of the standard
|
342
|
343
|
// library.
|
343
|
344
|
// XXX: modified in Ergo to add `requireTLS`, `heloDomain`, and `timeout` arguments
|
344
|
|
-func SendMail(addr string, a Auth, heloDomain string, from string, to []string, msg []byte, requireTLS, implicitTLS bool, timeout time.Duration) error {
|
|
345
|
+func SendMail(addr string, a Auth, heloDomain string, from string, to []string, msg []byte, requireTLS, implicitTLS bool, protocol string, localAddress net.Addr, timeout time.Duration) error {
|
345
|
346
|
if err := validateLine(from); err != nil {
|
346
|
347
|
return err
|
347
|
348
|
}
|
|
@@ -350,7 +351,7 @@ func SendMail(addr string, a Auth, heloDomain string, from string, to []string,
|
350
|
351
|
return err
|
351
|
352
|
}
|
352
|
353
|
}
|
353
|
|
- c, err := Dial(addr, timeout, implicitTLS)
|
|
354
|
+ c, err := Dial(protocol, addr, localAddress, timeout, implicitTLS)
|
354
|
355
|
if err != nil {
|
355
|
356
|
return err
|
356
|
357
|
}
|