美文网首页
go使用smtp批量发送邮件的正确姿势

go使用smtp批量发送邮件的正确姿势

作者: webxiaohua | 来源:发表于2020-08-14 15:21 被阅读0次
    前提概要

    今天在处理发送邮件需求的时候遇到了一个棘手的问题,想使用单封邮件发送给多个收件人,百度谷歌搜索下来都是遍历发送,这种其实是绕过了问题,于是我踩坑个把小时,整理此文。

    smtp发送原理

    https://golang.google.cn/pkg/net/smtp/#SendMail
    golang的smtp包手册里面有介绍smtp的用法,注意看msg参数的介绍,说它遵循RFC822的格式。

    image.png
    这个格式我想知道怎么进行批量发送,于是找到这个格式定义的文档,其中的3.1.1章节有具体介绍这种格式的写法,

    看我们代码:

    type Email struct {
        to      string "to" // 多个用 ; 分隔
        subject string "subject"
        msg     string "msg"
    }
    
    func (s *Service) SendEmail(email *Email) error {
        auth := smtp.PlainAuth("", EMAIL_USER, EMAIL_PASSWORD, EMAIL_HOST)
        sendTo := strings.Split(email.to, ";")
        rfc822_to := strings.Join(sendTo, ",\r\n ")
        str := fmt.Sprintf("From: %s\r\nTo: %s\r\nsubject: %s\r\n\r\n%s", EMAIL_USER, rfc822_to, email.subject, email.msg)
        err := smtp.SendMail(
            EMAIL_SERVER_ADDR,
            auth,
            EMAIL_USER,
            sendTo,
            []byte(str),
        )
        return err
    }
    

    注意在 rfc822_to 变量这里,\r\n 之后有个空格,很关键,少了这个就无法满足格式导致邮件发送不出去。

    相关文章

      网友评论

          本文标题:go使用smtp批量发送邮件的正确姿势

          本文链接:https://www.haomeiwen.com/subject/gnomdktx.html