go 发送邮件

问题

go发送邮件,直接使用smtp库时报如下错误:

x509: certificate signed by unknown authority

原因

可能的原因是正连接的主机返回电脑不能识别的根CA证书,可能是自签署证书或远端的错误配置或者SSL中间人劫持

解决

修改smtp.SendMail到本地工程(注意:不要直接修改net/smtp包中的代码)

func SmtpSendMail(addr string, a smtp.Auth, from string, to []string, msg []byte) error {
    //fmt.Print(addr, a, from, to, msg)
    c, err := smtp.Dial(addr)
    if err != nil {
        return err
    }
    defer c.Close()
    //  if err = c.hello(); err != nil {
    //      return err
    //  }
    if ok, _ := c.Extension("STARTTLS"); ok {
        host, _, _ := net.SplitHostPort(addr)
        config := &tls.Config{InsecureSkipVerify: true, ServerName: host}
        //      if testHookStartTLS != nil {
        //          testHookStartTLS(config)
        //      }
        if err = c.StartTLS(config); err != nil {
            return err
        }
    }
    //  if a != nil && c.ext != nil {
    //      if _, ok := c.ext["AUTH"]; ok {
    if a != nil {
        if ok, _ := c.Extension("AUTH"); ok {
            if err = c.Auth(a); err != nil {
                return err
            }
        }
    }
    if err = c.Mail(from); err != nil {
        return err
    }
    for _, addr := range to {
        if err = c.Rcpt(addr); err != nil {
            return err
        }
    }
    w, err := c.Data()
    if err != nil {
        return err
    }
    _, err = w.Write(msg)
    if err != nil {
        return err
    }
    err = w.Close()
    if err != nil {
        return err
    }
    return c.Quit()
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值