美文网首页Go语言实践
使用gomail发送邮件 - - 避坑

使用gomail发送邮件 - - 避坑

作者: Hifun丶 | 来源:发表于2019-11-26 15:19 被阅读0次

做电商的项目时常常会拿到收到订单给发一封提醒邮件的需求,这个工作完全可以让服务器自动执行,下面就介绍一下在Go中发送邮件最好用的方式——gomail,话不多说,先上代码:

1、第一步需要下载gomail包:

go get gopkg.in/gomail.v2

更多功能可以参考:https://github.com/go-gomail/gomail

2、代码主体:

package main

import (
    "fmt"
    "gopkg.in/gomail.v2"
    "log"
    "strconv"
)

func SendMail(mailTo []string, subject string, body string) error {
    // 设置邮箱主体
    mailConn := map[string]string{
        "user": "xxxxxxx@exmail.com",
        "pass": "your password",
        "host": "smtp.exmail.qq.com",
        "port": "465",
    }

    port, _ := strconv.Atoi(mailConn["port"])
    m := gomail.NewMessage()
    m.SetHeader("From", m.FormatAddress(mailConn["user"], "xx官方")) // 添加别名
    m.SetHeader("To", mailTo...)   // 发送给用户(可以多个)
    m.SetHeader("Subject", subject)  // 设置邮件主题
    m.SetBody("text/html", body)  // 设置邮件正文
    d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"]) // 设置邮件正文
    err := d.DialAndSend(m)
    return err
}
func main() {
    // 发送方
    mailTo := []string{
        "exmail<xxxxxx@exmail.com>",  // 这里最好写成邮箱收发件时的这种标记格式
    }
    // 邮件主题
    subject := "Hello"
    // 邮件正文
    body := "Automatic send by Go gomail from xxx官方."
    err := SendMail(mailTo, subject, body)
    if err != nil {
        log.Print(err)
        fmt.Printf("Send fail!")
        return
    }
    fmt.Printf("send successfully!")
}

3、说明

这里需要额外说明的一点是关于邮箱的设置,在设置邮箱主体的部分,需要先设置邮箱开启客户端授权密码,以前163邮箱只需要在pass填密码即可 ,现在需要开启授权密码后在pass填写授权码,(qq邮箱也需要开启),如果使用企业邮箱,这里在pass填写密码即可。
使用163邮箱可能会报gomail: could not send email 1: 554 DT:SPM 163 smtp11这个错,会被163邮箱执行退信操作,因为被当成了垃圾邮件,网上的朋友解决了这个问题,是采用发送之前抄送自己的方式,如果遇到了可以参考一下:
使用网易163邮箱发送邮件报错:554 DT:SPM
所以我推荐大家还是使用企业邮箱更好,安全 还可靠;有空就试试,万一需求就在路上呢?

4、参考

1、使用gomail发送邮件之解决附件名乱码的问题

相关文章

网友评论

    本文标题:使用gomail发送邮件 - - 避坑

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