Unfortunately, the socks proxy module doesn't appear to support timeouts. If you don't need connection timeouts, though, it should work to create your own DialTimeout that ignores the timeout and calls the socks dialer:
dialer := proxy.FromEnvironment()
mail.NetDialTimeout = func(network, address string, timeout time.Duration) (net.Conn, error) {
return dialer.Dial(network, address)
}
To make things better, probably both modules should be updated to use / provide a net.Dialer, which supports timeouts, cancellation, and other features.