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

使用EOF 10分钟后,smtp.SendMail失败

使用EOF 10分钟后,smtp.SendMail失败

Go
白板的微信 2021-05-04 21:49:09
我正在尝试通过标准库SMTP包发送邮件,并且它在10分钟内什么都没做,然后由于我无法理解的无用文件结尾错误而失败。// excerpt from the calling function// --- snip ---if e := mailNotify(board, validPosts, ipMinusPort, delTime); e != nil {    errorPage(w, tmpl, "Contact Administrator",        "Email notification failed, please contact archive admin.")    log.Println("ERROR: Failed to send notification email: " + e.Error())}// --- snip ---func mailNotify(board *config.Board, validPosts []int64,                         ip string, delTime time.Time) error {    addresses := strings.Split(board.NotifyAddr, ",")    if len(addresses) < 1 {        return nil    }    msg := new(bytes.Buffer)    type values struct {        IP      string        Posts   []int64        DelTime time.Time    }    t.ExecuteTemplate(msg, "post_reported", &values{ip, validPosts, delTime})    auth:= smtp.PlainAuth("", board.NotifyAddr, board.NotifyPass,        strings.Split(board.SMTPServer, ":")[0])    return smtp.SendMail(board.SMTPServer, auth,        board.FromEmail, addresses, msg.Bytes())}记录的确切消息是:2012/07/25 22:57:58错误:无法发送通知电子邮件:EOF我已经log.Printf调试了此功能,并验证了此时发送的值是否有效。该电子邮件地址是gmail.com上的真实地址,并且密码正确,并且board.SMTPServer为smtp.googlemail.com:465。我尝试将msg.Bytes()的结果存储在一个单独的变量中,并采用长度来确保它正在生成要发送的字节数组,并且长度的确不为零。我猜测EOF正在从标准库中比SendMail函数本身更深的地方冒出来,但是我不知道它在哪里阻塞,我不知道该怎么做。
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

Gmail的端口465用于通过TLS进行连接,但是SendMail希望使用简单的旧TCP。尝试改为连接到端口587。可用时,SendMail将自动升级到TLS(在本例中就是这种情况)。


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 562 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信