Go 发送邮件的两种方式

使用 net/smtp发送邮件

package main

import (
	"fmt"
	"log"
	"net/mail"
	"net/smtp"
	"strconv"
	"strings"
)

func main() {
	/*
		IMAP/SMTP 设置方法
		用户名/帐户: 你的QQ邮箱完整的地址
		密码: 生成的授权码
		电子邮件地址: 你的QQ邮箱的完整邮件地址
		接收邮件服务器: imap.qq.com,使用SSL,端口号993
		发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
	*/
	// 邮件发送者、接收者、SMTP服务器配置
	fromAcc := "xxxxx@qq.com" //发送者邮箱
	fromUser := "shi"              //发送者名称(随意)
	password := "xxxxxxxxxx" // 这不是你的邮箱密码,而是开启SMTP服务后获得的授权码
	smtpServer := "smtp.qq.com"
	smtpPort := 587 // 或465,具体取决于SMTP服务器配置
	// 构建认证信息
	auth := smtp.PlainAuth("", fromAcc, password, smtpServer)

	// 收发件人信息
	from := mail.Address{fromUser, fromAcc}
	to := mail.Address{"收件人的名字(可以随便)", "xxxxx@qq.com"}

	// 构建邮件头和正文
	headers := make(map[string]string)
	headers["From"] = from.String()
	headers["To"] = to.String()
	headers["Subject"] = "Go使用 net/smtp发送邮件" //主题
	headers["MIME-Version"] = "1.0"
	headers["Content-Type"] = "text/plain; charset=UTF-8"

	var headerBuffer strings.Builder
	for k, v := range headers {
		headerBuffer.WriteString(k + ": " + v + "\r\n")
	}
	headerBuffer.WriteString("\r\n") // 空行分隔邮件头和邮件体
	body := "这是邮件的正文内容。"
	message := headerBuffer.String() + body

	// 发送邮件
	err := smtp.SendMail(smtpServer+":"+strconv.Itoa(smtpPort),
		auth,
		fromAcc,
		[]string{to.Address},
		[]byte(message))
	if err != nil {
		log.Fatalf("发送邮件失败: %v", err)
	}
	fmt.Println("发送邮件成功!")
}

使用第三方库gomail发送邮件 

安装gomail:        go get gopkg.in/gomail.v2 

package main

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

func main() {
	// 设置SMTP服务器配置
	mailer := gomail.NewMessage()
	mailer.SetHeader("From", "xxxxx@qq.com")   // 发件人邮箱
	mailer.SetHeader("To", "xxxxx@qq.com")     // 收件人邮箱
	mailer.SetHeader("Subject", "Go使用第三方库gomail发送邮件") //主题
	mailer.SetBody("text/html", "这里可以添加邮件正文内容")

	/*
		IMAP/SMTP 设置方法
		用户名/帐户: 你的QQ邮箱完整的地址
		密码: 生成的授权码
		电子邮件地址: 你的QQ邮箱的完整邮件地址
		接收邮件服务器: imap.qq.com,使用SSL,端口号993
		发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
	*/
	// QQ邮箱SMTP服务器配置
	smtpHost := "smtp.qq.com"
	smtpPort := 587 // 465或587,根据邮箱服务商和是否使用SSL/TLS选择端口
	smtpUser := "xxxxx@qq.com"
	smtpPass := "xxxxxxxxxx" // 这不是你的邮箱密码,而是开启SMTP服务后获得的授权码

	// 构建SMTP客户端
	dialer := gomail.NewDialer(smtpHost, smtpPort, smtpUser, smtpPass)
	dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true} // 忽略证书校验,仅用于测试环境

	// 发送邮件
	if err := dialer.DialAndSend(mailer); err != nil {
		log.Fatal(err)
	}
	fmt.Println("邮件发送成功!")
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值