golang 邮件发送

9 篇文章 0 订阅
本文介绍了如何使用Go语言库gomail,通过预先配置的EmailParam结构,实现在Go程序中发送带有HTML正文的企业邮箱通知。重点讲解了初始化参数、设置收件人和抄送、设置邮件主题和内容,以及发送邮件的具体步骤。
摘要由CSDN通过智能技术生成

邮件发送

package utils

import (
	"github.com/go-gomail/gomail"
	"strings"
)

type EmailParam struct {
	// ServerHost 邮箱服务器地址,如腾讯企业邮箱为smtp.exmail.qq.com
	ServerHost string
	// ServerPort 邮箱服务器端口,如腾讯企业邮箱为465
	ServerPort int
	// FromEmail 发件人邮箱地址
	FromEmail string
	// FromPasswd 发件人邮箱密码(注意,这里是明文形式),TODO:如果设置成密文?
	FromPasswd string
	// Toers 接收者邮件,如有多个,则以英文逗号(“,”)隔开,不能为空
	Toers string
	// CCers 抄送者邮件,如有多个,则以英文逗号(“,”)隔开,可以为空
	CCers string
}

// 全局变量,因为发件人账号、密码,需要在发送时才指定
// 注意,由于是小写,外面的包无法使用
var serverHost, fromEmail, fromPasswd string
var serverPort int

var m *gomail.Message

func InitEmail(ep *EmailParam) {
	toers := []string{}

	serverHost = ep.ServerHost
	serverPort = ep.ServerPort
	fromEmail = ep.FromEmail
	fromPasswd = ep.FromPasswd

	m = gomail.NewMessage()
	if len(ep.Toers) == 0 {
		return
	}

	for _, tmp := range strings.Split(ep.Toers, ",") {
		toers = append(toers, strings.TrimSpace(tmp))
	}

	// 收件人可以有多个,故用此方式
	//m.SetHeader("To", toers...)
	m.SetHeader("To", toers...)

	//抄送列表
	if len(ep.CCers) != 0 {
		for _, tmp := range strings.Split(ep.CCers, ",") {

			toers = append(toers, strings.TrimSpace(tmp))
		}

		m.SetHeader("Cc", toers...)
	}

	// 发件人
	// 第三个参数为发件人别名,如"李大锤",可以为空(此时则为邮箱名称)
	m.SetAddressHeader("From", fromEmail, "天天生鲜邮件服务")
}

// SendEmail body支持html格式字符串
func SendEmail(subject, body string) (err error) {
	// 主题
	m.SetHeader("Subject", subject)

	// 正文
	m.SetBody("text/html", body)

	d := gomail.NewPlainDialer(serverHost, serverPort, fromEmail, fromPasswd)
	// 发送
	err = d.DialAndSend(m)
	if err != nil {
		return err
	}
	return err
}

调用

package main

import (
	"fmt"
	"github.com/wu_jun_wei/fresh/utils"
	"strconv"
)

func main() {
	//发送邮件
	//初始邮件化参数
	ep := new(utils.EmailParam)
	ep.ServerHost = "smtp.qq.com"        //qq邮箱
	ep.ServerPort = 587                  //qq邮箱端口
	ep.FromEmail = "342881834631@qq.com" //发送者邮箱
	ep.FromPasswd = "ubswshpguwyjda1ff"  //发送者邮箱密码 也是第三方授权密码
	ep.Toers = "10603241241@qq.com"      //接收者邮箱 设置多个接收者 可用 , 隔开 列如  "10603241241@qq.com,32145241@qq.com"
	subject := "用户激活!"                   //邮箱件主题
	//邮件内容
	body := `<a href="http://192.168.0.157:8080/user/activate?id=` + strconv.Itoa(int(uid)) + `">立即激活</a>`
	//初始化邮件系统
	utils.InitEmail(ep)
	//发送邮件
	err := utils.SendEmail(subject, body)
	if err != nil {
		fmt.Println(err)
		return
	}
}

ep.FromPasswd = “ubswshpguwyjda1ff” //发送者邮箱密码 也是第三方授权密码
获取方式 (仅用于个人测试)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

获取授权码详细链接:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值