为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中 smtp 客户端的自定义拨号器?

Golang 中 smtp 客户端的自定义拨号器?

Go
青春有我 2023-03-21 15:06:14
我正在尝试通过 socks5 代理连接到 smtp 服务器package mainimport (    "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: EOFgoroutine 1 [running]:main.Connect()        main.go:18 +0x1e5main.main()        main.go:10 +0x20exit status 2有smtp.Client什么方法可以将 smtp 服务器与 socks 代理连接?我没有在谷歌中找到答案,也没有找到任何图书馆提供此功能。
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您使用的端口 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")

或者,您可以使用需要显式 TLS 的端口 587:


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 {

    ...


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号