search.png
关于我
menu.png
使用gomail发送邮件

概述

为了实现一个邮件验证码功能,特意了解了一下go如何发送邮件。本来以为会很麻烦,没想到其实很简单。

工具类

实现的工具类如下:

package mail

import "gopkg.in/gomail.v2"

// MailConfig 邮箱发送配置
type MailConfig struct {
    Account string
    // QQ邮箱填写授权码
    Password string
    // QQ:POP/SMTP 587
    Port int
    // QQ:smtp.qq.com
    Host string
}

// SendMail 发送邮件
// from 发送者别名,mailTo 发送对象,subject主题,body 内容
func SendMail(conf *MailConfig, from string, mailTo []string, subject string, body string) error {
    m := gomail.NewMessage()

    //这种方式可以添加别名,即“XX官方”
    m.SetHeader("From", m.FormatAddress(conf.Account, from))
    //说明:如果是用网易邮箱账号发送,以下方法别名可以是中文,如果是qq企业邮箱,
    //以下方法用中文别名,会报错,需要用上面此方法转码
    //m.SetHeader("From", "FB Sample"+"<"+mailConn["user"]+">")
    //这种方式可以添加别名,即“FB Sample”, 也可以直接用
    // <code>m.SetHeader("From",mailConn["user"])</code> 读者可以自行实验下效果
    //m.SetHeader("From", mailConn["user"])
    m.SetHeader("To", mailTo...)    //发送给多个用户
    m.SetHeader("Subject", subject) //设置邮件主题
    m.SetBody("text/html", body)    //设置邮件正文

    d := gomail.NewDialer(conf.Host, conf.Port, conf.Account, conf.Password)

    err := d.DialAndSend(m)
    return err
}


主要使用到了gomail这个包。我使用的是qq邮箱,QQ邮箱需要申请POP/SMTP的授权码。端口则固定是587,域名是smtp.qq.com。

使用这个工具类:

mail.SendMail(mailConfig,
        "认证", []string{mailToStr},
        "登录验证码",
        fmt.Sprintf("您正在尝试登录系统,这是您的验证码:%s,该验证码有效期为%d秒。",
            randomStr, ttlSeconds))

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2022年04月04日 09:15:25

评论区#

还没有评论哦,期待您的评论!

关闭特效