我试着在一个go程序中使用smtp.SendMail()
,但是它阻塞了,直到超时才返回,这阻止了我找出错误。
我的代码:
to := []string{"recepient@example.com"}
err := smtp.SendMail("smtp.web.de:25", smtp.CRAMMD5Auth("example@web.de", "password"), "example@web.de", to, []byte("hi"))
if err != nil {
fmt.Println(err)
}else{
fmt.Println("Success")
}
很长一段时间后,我得到以下错误:
dial tcp 213.165.67.124:25: connection timed out
知道真正的问题是什么吗?
3条答案
按热度按时间cwxwcias1#
SendMail
拨号smtp服务器使用非tls tcp连接,可能您的smtp服务器默认使用ssl tcp连接,不支持STARTTLS
扩展。客户端发送STARTTLS
命令,服务器将不回复,所以现在被阻止。现在你可以用tls拨号smtp服务器,这不会阻塞,详情请参见example code,或者使用非tls端口。
n8ghc7c12#
如果您看到超时,可以尝试使用net.Dial直接验证连接:
如果没有连接,那么有一些本地阻塞套接字。询问您本地网络的家伙有关防火墙设置或是否有任何网络代理类型的设备拦截传出的流量。
nhhxz33t3#
我敢肯定,任何通过端口:25是阻止在路由器的水平,所以你将不得不改变你的路由器或服务器提供商的设置。