美文网首页
golang发送邮件以及附件

golang发送邮件以及附件

作者: Sixah | 来源:发表于2018-12-28 18:42 被阅读0次

    最近工作上有个需要发送邮件的需求,所以研究了下golang怎么发送邮件,这里记录下。

    • 这里推荐一个第三方库
      go get -v github.com/jordan-wright/email
      之前也研究了官方库net/smtp,以及其他第三方库如gomail但是都不符合我的开发需求,使用的这个第三方库完美的解决了需求。
    • 下面写个例子,演示一下 email 第三方库的使用,以及使用自定义模板发送邮件
      首先在同级目录创建email-template.html,main.go两个文件。
    // email-template.html
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        </head>
        <body>
            <h4>亲爱的{{.ToUserName}},您好!</h4>
            <div>{{.Message}}</div>
            </br>
            <div>
                {{.FromUserName}} </br>
                {{.TimeDate}}
            </div>
        </body>
    </html>
    
    // main.go
    package main 
    
    import (
        "bytes"
        "html/template"
        "log"
        "net/smtp"
        "time"
        "github.com/jordan-wright/email"
    )
    
    func SendMail(fromUser, toUser, subject string) error {
        // NewEmail返回一个email结构体的指针
        e := email.NewEmail()
        // 发件人
        e.From = fromUser
        // 收件人(可以有多个)
        e.To = []string{toUser}
        // 邮件主题
        e.Subject = subject
        // 解析html模板
        t,err := template.ParseFiles("email-template.html")
        if err != nil {
            return err
        }
        // Buffer是一个实现了读写方法的可变大小的字节缓冲
        body := new(bytes.Buffer)
        // Execute方法将解析好的模板应用到匿名结构体上,并将输出写入body中
        t.Execute(body,struct {
            FromUserName string
            ToUserName   string
            TimeDate     string
            Message      string
        }{
            FromUserName: "go语言",
            ToUserName:   "Sixah",
            TimeDate:     time.Now().Format("2006/01/02"),
            Message:      "golang是世界上最好的语言!",
        })
        // html形式的消息
        e.HTML = body.Bytes()
        // 从缓冲中将内容作为附件到邮件中
        e.Attach(body, "email-template.html", "text/html")
        // 以路径将文件作为附件添加到邮件中
        e.AttachFile("/home/shuai/go/src/email/main.go")
        // 发送邮件(如果使用QQ邮箱发送邮件的话,passwd不是邮箱密码而是授权码)
        return e.Send("smtp.qq.com:587", smtp.PlainAuth("", "xxx@qq.com", "passwd", "smtp.qq.com"))
    }
    
    func main() {
        fromUser := "golang<xxx@qq.com>"
        toUser := "xxx@qq.com"
        subject := "hello,world"
        err := SendMail(fromUser,toUser,subject)
        if err != nil {
            log.Println("发送邮件失败")
            return
        }
        log.Println("发送邮件成功")
    }
    
    • 下面是发送效果


      f316fa6fc6316ef2fb6b8b473f4a5def.png

    附件中的中文是没有乱码的,email在解析附件的时候添加到了正文中,字符编码不是UTF-8所以显示有乱码。
    时间有限,今天就先到这里啦,有空再修改更新。

    相关文章

      网友评论

          本文标题:golang发送邮件以及附件

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