GO通过SMTP协议发送邮件

ops/2025/1/12 0:07:03/

什么是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.ppmy.cn/ops/149288.html

相关文章

Scala语言的面向对象编程

Scala语言的面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来组织代码&#xff0c;这些对象能够包含数据&#xff08;属性&#xff09;以及功能&#xff08;方法&#xff09;。Scala…

spring boot 多数据源集成mysql、postgresql、phoenix、doris等

如何搭建多数据源项目只要以下简单几步; 一. 创建核心在config.datasource文件夹里 二. 引入相对应的jar包 三. 创建数据库连接配置 四. 写逻辑代码进行验证 1.DataSource package com.irootech.config.datasource;import java.lang.annotation.*;Target({ElementType.MET…

基于Spring Boot的宠物健康顾问系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【Uniapp-Vue3】uniapp创建组件

项目右键-->新建-->目录-->取名components 注意&#xff1a;名字一定要是components&#xff0c;小写 右键components文件-->新建组件-->输入组件名称-->勾选创建同名目录-->创建 注意&#xff1a;命名要么使用驼峰命名法&#xff0c;如userHeader&…

夯实前端基础之CSS篇

知识点概览 这一篇是讲CSS的&#xff0c;前面还有一篇总结HTML的哦~夯实前端基础之HTML篇&#xff0c;后面还会更新其他系列哦~ 一、必知必会 1. html中引入样式的几种方式&#xff1f; 内联样式&#xff08;html元素的style属性&#xff09;内部样式表&#xff08;style标签…

目标值子矩阵的数量

目标值子矩阵的数量 问题描述 小M最近在研究矩阵&#xff0c;他对矩阵中的子矩阵很感兴趣。给定一个矩阵 matrix 和一个目标值 target&#xff0c;他的任务是找到所有总和等于目标值的非空子矩阵的数量。子矩阵通过选择矩阵的某个矩形区域定义&#xff0c;形式为 (x1, y1, x2,…

adb remount 重新挂载 system时报错 Device or resource busy

问题&#xff1a; android 7.1.2系统中 system 属于只读权限&#xff0c;选用更改成读写权限。 操作&#xff1a;使用一下3个步骤后报错Device or resource busy。 1. adb shell 2. su 3. mount -o remount,rw /system 解决方案&#xff1a;执行以下5个步…

Ruby语言的软件开发工具

Ruby语言的软件开发工具概述 引言 Ruby是一种简单且功能强大的编程语言&#xff0c;它以优雅的语法和灵活性而闻名。自1995年首次发布以来&#xff0c;Ruby已经被广泛应用于各种开发领域&#xff0c;特别是Web开发。随着Ruby语言的普及&#xff0c;相关的开发工具也日益丰富。…