当前位置: 首页 > 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")
}

相关文章:

GO通过SMTP协议发送邮件

什么是SMTP协议 SMTP&#xff08;Simple Mail Transfer Protocol&#xff0c;简单邮件传输协议&#xff09;是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时&#xff0c;它会使用SMTP协议与目标服务器建立连接&#xff0c;并传输邮件内容。SMTP协议的…...

轻量自高斯注意力机制LSGAttention模型详解及代码复现

模型背景 近年来,卷积神经网络(CNN)在高光谱图像分类领域取得了显著进展。然而,CNN面临 长距离关系建模 和 计算成本 增加的挑战。为解决这些问题,研究人员提出了基于 轻量自高斯注意(Light Self-Gaussian-Attention, LSGA) 机制的视觉转换器(Vision Transformer, VIT),旨…...

解读若依框架中的`@Excel` 和 `@Excels` 注解

文章目录 一、Excels 注解详解1.1 适用场景1.2 作用与好处 二、Excel 注解详解2.1 核心属性解析2.2 高级用法2.3 综合应用案例 三、总结 解读若依框架中的 Xss 注解博客&#xff1a;解读若依框架中的 Xss 注解 接下来我们将对若依框架中的 Excel 和 Excels 注解进行更加详细的…...

云商城--基础数据处理和分布式文件存储

第2章 基础数据处理和分布式文件存储 1.分布式文件存储系统Ceph学习 ​ 1).掌握Ceph架构 ​ 2).掌握Ceph组件 ​ 3).搭建Ceph集群(了解) 2.Ceph使用 ​ 1).基于Ceph实现文件上传 ​ 2).基于Ceph实现文件下载 3.SKU、SPU管理 ​ 1).掌握SKU和SPU关系 ​ 2).理解商品发…...

六十九:基于openssl实战验证RSA

RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种非对称加密算法&#xff0c;广泛应用于数据加密和数字签名领域。在实际开发和学习过程中&#xff0c;理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础&#xff0c;通过实例操作来验证和理解 RSA 的…...

Three.js 用户交互:构建沉浸式3D体验的关键

文章目录 前言一、基本交互&#xff1a;鼠标与触摸事件二、高级交互&#xff1a;键盘控制与游戏手柄支持三、物理模拟与碰撞检测四、手势识别与多点触控五、增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;六、触觉反馈与震动效果七、语音控制八、眼球…...

Android车机DIY开发之学习篇(五)默认应用修改

Android车机DIY开发之学习篇(五)默认应用修改 android默认应用位置 sdk/packages/apps InitRC配置 应用安装的目录 /system/priv-app 该路径存放一些系统底层的应用&#xff0c;比如Setting&#xff0c;systemUI等。该目录中的app拥有较高的系统权限&#xff0c;而且如果要使…...

linux 设置mysql 外网访问

1、修改 MySQL 配置文件 找到并编辑配置文件&#xff1a;在Linux系统中&#xff0c;MySQL的配置文件通常是/etc/mysql/my.cnf&#xff0c;使用命令sudo vim /etc/mysql/my.cnf打开文件。 注释或修改 bindaddress&#xff1a;找到bindaddress 127.0.0.1&#xff0c;将其注释掉…...

SQL UNION 操作符

SQL UNION 操作符 SQL UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它将多个结果集组合成一个单独的结果集&#xff0c;并去除重复的行。为了使用 UNION&#xff0c;每个 SELECT 语句必须具有相同的列数&#xff0c;并且对应列的数据类型必须兼容。 语法 SELECT c…...

c++ 17 constexpr

未来已来&#xff1a;从SFINAE到concepts #include <type_traits> #include <vector> #include <list> #include <iostream> // 一个通用的容器打印函数&#xff0c;支持任何带 begin()/end() 的容器 template<typename Container> …...

Java QueryWrapper groupBy自定义字段,以及List<Map>转List<Entity>

Java queryWrapper groupby自定义字段 String sql "data_id,(select value from lz_html a where a.data_id lz_html.data_id and class_nametest-item-status) status," "(select value from lz_html a where a.data_id lz_html.data_id and class_nametes…...

【Rust自学】11.7. 按测试的名称运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试&#xff0c;就将测试的名称&#xff08;一个或多个&#xff09;作为cargo test的…...

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能&#xff0c;Cherry-Pick不是merge&#xff0c;只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介&#xff1a; git cherry-pick 是用来从一个分…...

Ubuntu 24.04 LTS系统安装Docker踩的坑

一开始我跟着Docker给出的官网文档 Ubuntu | Docker Docs 流程走&#xff0c;倒腾了两个多小时&#xff0c;遇到了各种坑&#xff0c;最后放弃了。在我们使用脚本安装Docker命令前&#xff0c;我们先把已经安装的Docker全部卸载掉。 卸载Docker 1.删除docker及安装时自动安装…...

工作生活的感悟

前言 这篇博客基本每年都更新&#xff0c;每年都有新的感悟&#xff0c;作为一个记录吧&#xff01;以后按照年来记录 2022年 不经意间&#xff0c;已在职场耕耘数载&#xff0c;特此记录以作回顾。 无用之用&#xff0c;方为大用&#xff1a; 年岁渐长&#xff0c;愈发体会…...

NCCL学习笔记-函数解析

前言 1.NCCL 是一个专注于 GPU 间高性能通信的库&#xff0c;不提供进程管理或安全通信功能。 2.用户需要依赖应用程序的进程管理系统&#xff08;如 MPI&#xff09;来管理进程&#xff0c;并确保 NCCL 在安全的网络环境中运行。 3.通过正确配置环境变量&#xff08;如 NCCL_…...

windows系统如何将基座大模型私有化部署

1.windows10系统 安装npm、node、 git 最新版本 安装vmware虚拟机 内存8GB以上 双核4线程 2.vmware虚拟机 安装ubuntu系统 22.04版本 3.进入ubuntu系统 3.1 安装Ollama 基座大模型工具 在命令行中执行 curl -fsSL https://ollama.com/install.sh | sh 浏览器打开 …...

牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定

1. 题目描述——BC106 上三角矩阵判定 牛客网OJ题链接 描述 KiKi想知道一个n阶方矩是否为上三角矩阵&#xff0c;请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵&#xff0c;主对角线为从矩阵的左上角至右下角的连线。 示例 输入&#xff1a; 3 1 2 3 0 4 5 0 0…...

CentOS 7 下 MySQL 5.7 的详细安装与配置

1、安装准备 下载mysql5.7的安装包 https://dev.mysql.com/get/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 下载后上传至/home目录下 2、mysql5.7安装 2.1、更新yum并安装依赖 yum update -y sudo yum install -y wget sudo yum install libaio sudo yum install perl su…...

【深度学习】数据预处理

为了能用深度学习来解决现实世界的问题&#xff0c;我们经常从预处理原始数据开始&#xff0c; 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中&#xff0c;我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样&#xff0c;pan…...

从一篇TIE论文的稳定性分析入手,手把手复现Bode图判据的MATLAB实现

从TIE论文案例到MATLAB实践&#xff1a;Bode图判据的稳定性分析全解析 在电力电子系统设计中&#xff0c;LCL型并网逆变器的稳定性分析一直是工程师面临的挑战。2015年发表在IEEE Transactions on Industrial Electronics上的那篇经典论文&#xff0c;为我们提供了一个绝佳的研…...

5分钟搞懂线结构光三维重建:从激光平面到深度信息的完整流程

线结构光三维重建&#xff1a;从激光平面到深度信息的实战解析 当你第一次看到激光线扫过物体表面时&#xff0c;可能不会想到这条细细的光线背后隐藏着精确测量物体三维形状的能力。线结构光三维重建技术正悄然改变着工业检测、逆向工程和医疗影像等领域——它不需要接触物体…...

March7thAssistant:崩坏:星穹铁道企业级自动化解决方案

March7thAssistant&#xff1a;崩坏&#xff1a;星穹铁道企业级自动化解决方案 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 【核心价值定位】游戏工作室效率倍增引…...

Pixel Couplet Gen入门必看:Streamlit Components封装像素春联React组件

Pixel Couplet Gen入门必看&#xff1a;Streamlit Components封装像素春联React组件 1. 项目介绍 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创意春联生成器。与传统春联设计不同&#xff0c;它采用了独特的8-bit像素游戏风格&#xff0c;将中国传统春节元素与复古电…...

GB28181视频监控平台EasyCVR助力景区数字化转型,打造一体化视频监控解决方案

随着文旅行业数字化转型进程持续加速&#xff0c;旅游景区的安全管理、服务优化与运营效率提升已成为行业发展的核心诉求。景区场景普遍具有面积广阔、人员流动性强等特点&#xff0c;传统监控方案存在设备兼容性差、可视化管控能力不足等诸多短板&#xff0c;难以满足当前景区…...

从零搭建到百万QPS:Python MCP服务器模板实战对比(含Docker镜像体积、CI/CD兼容性、调试友好度全维度打分)

第一章&#xff1a;从零搭建到百万QPS&#xff1a;Python MCP服务器模板实战对比总览在构建高并发、低延迟的MCP&#xff08;Model Control Protocol&#xff09;服务时&#xff0c;Python凭借其生态丰富性与开发效率成为主流选型之一&#xff0c;但原生GIL限制与异步模型差异常…...

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议

Qwen3.5-2B图文对话实战&#xff1a;上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言&#xff1a;当AI遇见科研数据分析 作为一名科研工作者&#xff0c;你是否经常遇到这样的场景&#xff1a;实验室刚跑出一组数据&#xff0c;你迫不及待想分析趋势&#xff0c;却发…...

Matlab源代码教程:枝晶生长模拟中的溶质与液相分数分析

枝晶生长模拟&#xff0c;溶质、液相分数&#xff0c;matlab源代码 教程相场法模拟枝晶生长这事挺有意思的——想象金属熔液凝固时&#xff0c;那些像雪花般绽放的晶体结构&#xff0c;背后其实是溶质扩散和相变的战场。今儿咱们用MATLAB整活&#xff0c;搞个能看见晶体长毛刺的…...

别再手动调时间了!手把手教你用LinuxPTP的ptp4l和phc2sys搞定TSN网络时钟同步

工业TSN网络高精度时钟同步实战&#xff1a;从原理到生产环境部署 在工业自动化、智能驾驶和实时音视频传输领域&#xff0c;微秒级的时间同步已成为刚需。传统NTP协议毫秒级的精度在这些场景下显得力不从心&#xff0c;而基于IEEE 1588和802.1AS协议的PTP&#xff08;精确时间…...

EdisonZhou

AI训练存储选型的演进路线 第一阶段&#xff1a;单机直连时代 早期的深度学习数据集较小&#xff0c;模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低&#xff0c;吞吐量极高&#xff0c;也就是“数据离…...