golang 发送邮件及附件

这篇博客详细介绍了如何使用Golang进行邮件发送,并包含了两种不同的实现方式,覆盖了客户端请求参数设置以及添加附件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接
参考链接2

1、客户端的请求参数

type SendEmailReq struct {
	ServerHost string   `json:"serverHost"` // ServerHost 邮箱服务器地址,如腾讯企业邮箱为smtp.exmail.qq.com
	ServerPort int      `json:"serverPort"` // ServerPort 邮箱服务器端口,如腾讯企业邮箱为465
	FromEmail  string   `json:"fromEmail"`  // FromEmail 发件人邮箱地址
	FromPasswd string   `json:"fromPasswd"` // FromPasswd 发件人邮箱验证码 (例如:QQ邮箱是授权码,网易邮箱也是授权码)?
	Nickname   string   `json:"nickname"`   // 发件人昵称
	Toers      []string `json:"toers"`      // Toers 接收者邮件,如有多个,则以英文逗号(“,”)隔开,不能为空
	CCers      []string `json:"ccers"`      // CCers 抄送者邮件,如有多个,则以英文逗号(“,”)隔开,可以为空
	IsSSL      bool     `json:"isSSL"`.     //这个可以省略不传
	Subject    string   `json:"subject"`    //发送邮件主题
	Content    string   `json:"content"`    //发送邮件内容
}

2、第一种发送邮件方式

package logic

import (
	"context"
	"fmt"
	"github.com/jordan-wright/email"
	"github.com/tal-tech/go-zero/core/logx"
	"net/smtp"
	"send_email/internal/svc"
	"send_email/internal/types"
)

func (l *SendEmailLogic) SendEmail(req types.SendEmailReq) (*types.ResponseReply, error) {
	// 返回一个 email 结构体指针
	e := email.NewEmail()

	// 发件人
	e.From = req.FromEmail

	// 收件人(可以有多个)
	e.To = req.Toers

	// 邮件主题
	e.Subject = req.Subject

	// html形式的消息
	e.Text = []byte(req.Content)
	//e.HTML =
	auth := smtp.PlainAuth("", req.FromEmail, req.FromPasswd, req.ServerHost)
	// 发送邮件(如果使用QQ邮箱发送邮件的话,passwd不是邮箱密码而是授权码)
	e.Send(fmt.Sprintf("%s:%d", req.ServerHost,req.ServerPort),auth)

	return &types.ResponseReply{
		Code: 200,
		Message: "success",
		Data: nil,
	}, nil
}

3、第二种发送邮件方式

package logic

import (
	"context"
	"errors"
	"github.com/tal-tech/go-zero/core/logx"
	"gopkg.in/gomail.v2"
	"send_email/internal/svc"
	"send_email/internal/types"
)

func (l *SendEmailLogic) SendEmail(req types.SendEmailReq) (*types.ResponseReply, error) {
	m := gomail.NewMessage()
	// 设置收件人,收件人可以有多个,故用此方式
	m.SetHeader("To",req.Toers...)
	//设置抄送列表
	if len(req.CCers) != 0 {
		m.SetHeader("Cc", req.CCers...)
	}
	// 发件人 第三个参数为发件人别名,如"dcj",可以为空(此时则为邮箱名称)
	m.SetAddressHeader("From", req.FromEmail, req.Nickname)
	//主题
	m.SetHeader("Subject", req.Subject)
	//正文
	m.SetBody("text/html", req.Content)
	if err := gomail.NewDialer(req.ServerHost,req.ServerPort,req.FromEmail,req.FromPasswd).DialAndSend(m);err != nil {
		return nil, errors.New("发送邮件失败: "+err.Error())
	}
	return &types.ResponseReply{
		Code: 200,
		Message: "success",
		Data: nil,
	}, nil
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值