当前位置: 首页 > news >正文

GO通过SMTP协议发送邮件

什么是SMTP协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时,它会使用SMTP协议与目标服务器建立连接,并传输邮件内容。SMTP协议的通信过程大致如下:

1. 建立连接:发送服务器与目标服务器通过TCP/IP协议建立连接。默认情况下,SMTP服务器使用TCP端口25。

2. 握手和身份验证:发送服务器与目标服务器进行握手,确认双方准备好进行通讯。握手过程中,发送服务器可能会提供身份验证信息,以确保身份的合法性。

3. 发送邮件:发送服务器将邮件的源地址、目标地址、邮件内容等信息通过SMTP协议传输给目标服务器。通常情况下,邮件内容会经过编码和压缩,以减少传输的数据量。

4. 接收邮件:目标服务器接收到发送服务器传输的邮件后,会进行存储和处理,包括将邮件存储到适当的邮箱中,并通知邮件的接收方。

5. 断开连接:邮件传输完成后,发送服务器与目标服务器断开连接。

GO通过SMTP协议发送邮件

可以直接使用GO的"net/smtp"包来发送邮件


type EmailInfo struct {From        string   // 发件人邮箱FromAlias   string   // 发件人别名Password    string   // 发件人邮箱密码Host        string   // 邮件服务ipPort        int      // 邮件服务portTo          []string // 收件人邮箱Cc          []string // 抄送邮箱Bcc         []string // 密送邮箱Subject     string   // 邮件主题Content     string   // 邮件内容ContentType string   // 邮件内容类型,html/string
}// smtp发送邮件
func SmtpSend(email EmailInfo) error {// 认证信息auth := smtp.PlainAuth("", email.From, email.Password, email.Host)addr := fmt.Sprintf("%s:%d", email.Host, email.Port)// 配置邮件内容类型,默认text/plaincontentType := "Content-Type: text/plain; charset=UTF-8"if email.ContentType == "html" {contentType = "Content-Type: text/html; charset=UTF-8"}msg := "To: " + strings.Join(email.To, ",") + "\r\n" +"From: " + email.FromAlias + "<" + email.From + ">\r\n" +"Subject: " + email.Subject + "\r\n" +"" + contentType + "\r\n\r\n" +"" + email.Contentif err := smtp.SendMail(addr, auth, email.From, email.To, []byte(msg)); err != nil {fmt.Println("send failed:", err.Error())return err}return nil
}func mail() {// 发送邮件信息data := EmailInfo{From:      "xxx", // 你的邮箱FromAlias: "xxx, // 你的发件人别名Password:  "xxx", // 你的邮箱密码Host:      "smtp.qiye.163.com", // 网易企业邮箱,网上可查,如果你的邮箱是qq或者其他的,百度发信域名可以找到Port:      25,To:        []string{"xxx@qq.com"},Cc:        []string{"xxx@qq.com"},Subject:   "邮件主题",Content:   `你的邮件内容`,}if err := SmtpSend(testData); err != nil {fmt.Println("smtp send failed:", err.Error())return}fmt.Println("send success")
}

http://www.lryc.cn/news/519634.html

相关文章:

  • 轻量自高斯注意力机制LSGAttention模型详解及代码复现
  • 解读若依框架中的`@Excel` 和 `@Excels` 注解
  • 云商城--基础数据处理和分布式文件存储
  • 六十九:基于openssl实战验证RSA
  • Three.js 用户交互:构建沉浸式3D体验的关键
  • Android车机DIY开发之学习篇(五)默认应用修改
  • linux 设置mysql 外网访问
  • SQL UNION 操作符
  • c++ 17 constexpr
  • Java QueryWrapper groupBy自定义字段,以及List<Map>转List<Entity>
  • 【Rust自学】11.7. 按测试的名称运行测试
  • Git:Cherry-Pick 的使用场景及使用流程
  • Ubuntu 24.04 LTS系统安装Docker踩的坑
  • 工作生活的感悟
  • NCCL学习笔记-函数解析
  • windows系统如何将基座大模型私有化部署
  • 牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定
  • CentOS 7 下 MySQL 5.7 的详细安装与配置
  • 【深度学习】数据预处理
  • day01-HTML-CSS——基础标签样式表格标签表单标签
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
  • 搭建prometheus+grafana监控系统抓取Linux主机系统资源数据
  • uni-app无限级树形组件简单实现
  • 基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)
  • 请求方式(基于注解实现)
  • day38 tcp 并发 ,linux下的IO模型----IO多路复用
  • 更新Office后,LabVIEW 可执行程序生成失败
  • 重塑视频创作的格局!ComfyUI-Mochi本地部署教程
  • 如何理解机器学习中的非线性模型 ?
  • Web 品质样式表