我尝试通过socks5代理连接到smtp服务器
package main
import (
"net"
"net/smtp"
"golang.org/x/net/proxy"
)
func main() { Connect() }
func Connect() {
dialer, err := Socks("127.0.0.1:9050", "smtp.gmail.com:465")
if err != nil {
panic(err)
}
client, err := smtp.NewClient(dialer, "smtp.gmail.com:465")
if err != nil {
panic(err)
}
auth := smtp.PlainAuth("", "mymailaddr@gmail.com", "", "smtp.gmail.com:465")
if err = client.Auth(auth); err != nil {
panic(err)
}
}
func Socks(socks, addr string) (r net.Conn, err error) {
Dial, err := proxy.SOCKS5("tcp", socks, nil, proxy.Direct)
r, err = Dial.Dial("tcp", addr)
return
}难道不是,有错误吗?
panic: EOF
goroutine 1 [running]:
main.Connect()
main.go:18 +0x1e5
main.main()
main.go:10 +0x20
exit status 2smtp.Client是否可以将smtp服务器与socks代理连接起来?我没有在谷歌找到答案,也没有找到任何库提供这些功能。
发布于 2018-08-15 10:14:48
您使用的是端口465,它要求从一开始就使用TLS (隐式TLS),而不是在STARTTLS命令之后使用通常的TLS (显式TLS)。这意味着您作为Conn使用的dialer对象应该已经升级到TLS。为此,请执行以下操作:
import "crypto/tls"
...
func Connect() {
dialer, err := Socks("127.0.0.1:9050", "smtp.gmail.com:465")
...
conf := &tls.Config{ServerName: "smtp.gmail.com"}
tlsdialer := tls.Client(dialer, conf)
client, err := smtp.NewClient(tlsdialer, "smtp.gmail.com:465")或者,您可以使用端口587,它需要显式的TLS:
func Connect() {
dialer, err := Socks("127.0.0.1:9050", "smtp.gmail.com:587")
...
conf := &tls.Config{ServerName: "smtp.gmail.com"}
err = client.StartTLS(conf)
...
auth := smtp.PlainAuth("", "mymailaddr@gmail.com", "", "smtp.gmail.com:587")
if err = client.Auth(auth); err != nil {
...https://stackoverflow.com/questions/51856084
复制相似问题