首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义拨号为smtp客户端在戈朗?

自定义拨号为smtp客户端在戈朗?
EN

Stack Overflow用户
提问于 2018-08-15 09:21:35
回答 1查看 2K关注 0票数 0

我尝试通过socks5代理连接到smtp服务器

代码语言:javascript
复制
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
}

难道不是,有错误吗?

代码语言:javascript
复制
panic: EOF

goroutine 1 [running]:
main.Connect()
        main.go:18 +0x1e5
main.main()
        main.go:10 +0x20
exit status 2

smtp.Client是否可以将smtp服务器与socks代理连接起来?我没有在谷歌找到答案,也没有找到任何库提供这些功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 10:14:48

您使用的是端口465,它要求从一开始就使用TLS (隐式TLS),而不是在STARTTLS命令之后使用通常的TLS (显式TLS)。这意味着您作为Conn使用的dialer对象应该已经升级到TLS。为此,请执行以下操作:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 {
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51856084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档