golang发送邮件 gomail.v2 go发送附件 oss

go语言使用gomail.v2库实现发邮件功能
安装:
go get gopkg.in/gomail.v2

package internal

import (
	"gopkg.in/gomail.v2"
	"io"
	"net/http"
)

type SmtpConf struct {
	SmtpHost     string `json:"smtp_host"`
	SmtpPort     int    `json:"smtp_port"`
	SmtpUserName string `json:"smtp_username"`
	SmtpPassword string `json:"smtp_password"`
}

// SendSMTPMail @SendSMTPMail   oss文件以附件形式发送到用户邮箱
// @tomMail   接收者邮箱地址  例如:15556566363@163.com
// @subject   邮件标题
// @body      邮件正文
// @attachName   邮件附件名字 例如:https://src/27840b463b3f36a2fbfcca5b5078420e.pdf
// @attachUrl    邮件附件oss地址
func SendSMTPMail(toEmail, subject, body, attachName, attachUrl string) error {
	response, err := http.Get(attachUrl)
	if err != nil {
		return err
	}
	attach, err := io.ReadAll(response.Body)
	response.Body.Close()
	if err != nil {
		return err
	}
	smtpConf := SmtpConf{
		SmtpHost:     "smtp.***.***.com", //邮箱服务地址  注意qq和163邮箱的也不一样(具体可以搜索:go 发送邮件 邮箱服务地址配置)
		SmtpPort:     465,                //端口  可以写成465
		SmtpUserName: "12******.cn",      //发送人的邮箱账号
		SmtpPassword: "******zu",         //发送人的邮箱密码
	}
	nickname := ""
	m := gomail.NewMessage()
	m.SetHeader("From", m.FormatAddress(smtpConf.SmtpUserName, nickname)) //发送者的名字  默认发送者邮箱地址
	m.SetHeader("To", toEmail)                                            //设置接收者邮箱
	m.SetHeader("Subject", subject)                                       //设置邮件标题
	if body != "" {
		m.SetBody("text/html", body) //设置邮件正文
	}
	m.Attach(attachName, gomail.SetCopyFunc(func(w io.Writer) error { //设置邮件附件  第一个参数是附件名称   第二个参数是二进制文件流
		_, err := w.Write(attach)
		return err
	}))
	d := gomail.NewDialer(smtpConf.SmtpHost, smtpConf.SmtpPort, smtpConf.SmtpUserName, smtpConf.SmtpPassword) //初始化配置
	return d.DialAndSend(m)                                                                                   //发送邮件
}

// 后台发送邮件
func sendEmailAdmin(req *ReqSendEmailAdmin, res *ResSendEmailAdmin) {
	_, err := findAdmin(req.Token)
	if err != nil {
		res.Errcode = -1
		res.Errmsg = err.Error()
		return
	}
	if req.Url == "" {
		res.Errcode = -1
		res.Errmsg = "缺少oss地址"
		return
	}
	if req.ToEmail == "" {
		res.Errcode = -1
		res.Errmsg = "缺少接收者邮箱"
		return
	}
	subject := "竞拍电子发票"
	body := "尊敬的用户:感谢您参与竞拍并选择开票业务,查看发票请单击附件。祝您生活愉快!"
	attchName := "发票.png"
	err = SendSMTPMail(req.ToEmail, subject, body, attchName, req.Url)
	if err != nil {
		res.Errcode = -1
		res.Errmsg = err.Error()
		return
	}
	res.Errmsg = "发送邮件成功"
}

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值