我有下面的Go程序发送电子邮件。凭据是正确的。我甚至用curl测试了它们,我看到连接是成功的。请注意,TLS是不需要的。
package main
import (
"fmt"
"log"
"net/smtp"
)
const (
USERNAME = "ryuken@email.com"
PASSWD = "password1111"
HOST = "mail.privateemail.com"
PORT = "465"
)
func main() {
from := "ryuken@email.com"
to := []string{
"info@email.com",
}
msg := []byte("From: ryuken@email.com\r\n" +
"To: info@email.com" +
"Subject: Golang testing mail\r\n" +
"Email Body: Welcome to Go!\r\n")
auth := smtp.PlainAuth("", USERNAME, PASSWD, HOST)
url := fmt.Sprintf(HOST + ":" + PORT)
fmt.Printf("url=[%s]\n", url)
err := smtp.SendMail(url, auth, from, to, msg)
if err != nil {
log.Fatal(err)
}
fmt.Println("Mail sent successfully!")
}
你能告诉我为什么我得到下面的错误吗?
读取传输控制协议192.168.0.2:61740-〉198.54.122.135:465:wsarecv:远程主机强制关闭了现有连接。退出状态1
我尝试使用curl,我看到它连接到邮件服务器,但连接关闭了。
c:\GoProjects\goemail
λ curl -v --url "smtp://mail.privateemail.com:465" --user "ryuken@email.com:password1111" --mail-from "ryuken@email.com" --mail-rcpt "info@email.com-" --upload-file sample.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 198.54.122.135:465...
* Connected to mail.privateemail.com (198.54.122.135) port 465 (#0)
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0* Recv failure: Connection was reset
0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
* Closing connection 0
curl: (56) Recv failure: Connection was reset
我在等一封电子邮件。
2条答案
按热度按时间ulydmbyx1#
考虑到错误
Recv failure: Connection was reset
,我有几件事可能会成为您的问题。这个响应实际上表明服务器返回了一个RST包,它会立即断开连接。
换句话说,这可能是一个TCP问题,或者可能是防火墙配置错误?这个应用程序在哪里运行,有什么样的上下文/配置?
ps:你强调TLS不是必需的,但是你使用端口465通过TLS传输消息。这是故意的吗?
kognpnkq2#
非常感谢您的回复。我从https://gist.github.com/chrisgillis/10888032切换到了实现,它工作得很好。我仍然不明白我做错了什么。我对TLS的看法是错误的--它被使用了,go方法也考虑到了它。