首页 > 其他分享 >使用go标准库发送邮件

使用go标准库发送邮件

时间:2023-06-17 19:33:14浏览次数:51  
标签:clinet log err nil smtp 发送 go Fatal 邮件

在学习go语言的过程中,发现smtp邮件服务也在go语言的标准库中支持,所以写了一个小demo测试是否能够真的发送邮件,代码如下:

package main

import (
	"crypto/tls"
	"log"
	"net/smtp"
)

const (
	smtpServer = "smtp.163.com"      // smtp服务器地址
	account    = "xxxxxxxxxx"        // 邮箱账号
	password   = "xxxxxxxxxx"        // 邮箱密码
	addressee  = "xxxxxxxxxx"        // 收件人
)

func main() {
	// 创建smtp客户端
	clinet, err := smtp.Dial(smtpServer + ":25")
	if err != nil {
		log.Fatal("创建smtp客户端:", err)
	}
	// 使用TLS加密连接
	if err = clinet.StartTLS(&tls.Config{ServerName: smtpServer}); err != nil {
		log.Fatal("使用TLS加密连接:", err)
	}
	// 验证账号密码是否有效
	auth := smtp.PlainAuth("", account, password, smtpServer)
	if err = clinet.Auth(auth); err != nil {
		log.Fatal("验证账号密码是否有效:", err)
	}
	// 设置发送人
	if err = clinet.Mail(account); err != nil {
		log.Fatal("设置发送人:", err)
	}
	// 设置接收人
	if err = clinet.Rcpt(addressee); err != nil {
		log.Fatal(err)
	}
	// 创建客户端输入对象
	writerObject, err := clinet.Data()
	if err != nil {
		log.Fatal(err)
	}
	_, err = writerObject.Write([]byte("To:" + addressee + "\r\n" +
		"Subject:这是一个礼物:)\r\n" +
		"\r\n" +
		"这是一封测试邮件,旨在测试使用go语言发送基于smtp服务器的邮件"))
	if err != nil {
		log.Fatal(err)
	}
	// 关闭客户端输入对象
	if err = writerObject.Close(); err != nil {
		log.Fatal(err)
	}
	clinet.Quit()
}

在实现过程中发现有的smtp服务器必须要求连接传输的数据必须加密,不然不让传输,所以在发送邮件前必须先开启TLS加密,经过测试确实可以成功发送邮件:)

标签:clinet,log,err,nil,smtp,发送,go,Fatal,邮件
From: https://www.cnblogs.com/sdusk/p/17488107.html

相关文章

  • opcenter camstar designer基础知识-- Categories
    “类别”窗口用于定义新的“Storage”和“table”类别。类别如下  左窗格包含选择树,其中列出所有可用的类别。右键单击此选择窗格,将打开具有以下选项的快捷菜单: • addcategoriesdefinition添加类别定义• removecategoriesdefinition 移除类别定义下表定......
  • alfred 配合 picgo 图床 上传图片
    alfred配合picgo图床上传图片需要实现的功能是:alfred快捷键通过picgo直接上传剪切板中的图片前提:安装pngpastebrewinstallpngpastejq1.开启picgohttp上传2.创建alfredworkflow工作流一个scriptfilter将结果处理后传递到粘贴板中核心逻辑mkdir-p......
  • [Go] 理解 Go 的 unintptr、unsafe.Pointer、*type
    理解Go的unintptr、unsafe.Pointer、*type概念*type:用于传递对象地址,无法进行指针运算unsafe.Pointer:通用指针,用于表示任意类型的指针,无法进行指针运算,无法读取存储的值,可作为对象引用任意类型的指针可以转换为unsafe.Pointerunsafe.Pointer可以转换为任......
  • Django学习笔记
    1.常用命令创建项目:django-adminstartproject项目名创建APP(进入工程目录):pythonmanage.pystartapp网站名创建库表(进入工程目录):pythonmanage.pymakemigrations执行库表建立(进入工程目录):pythonmanage.pymigrate启动运动:pythonmanage.pyrunserver模板渲染嵌入......
  • MongoDB入门操作
    数据库操作查看所有数据库--->showdbs通过use关键字切换数据库--->usetestdb删除数据库--->db.dropDatabase()新增数据db.COLLECTION_NAME.insert(document)注意事项:在MongoDB中,存储的文档结构是一种类似于json的结构,称之为bson(全称为:BinaryJSON)如:{id:2,userna......
  • Go设计模式实战--用状态模式实现系统工作流和状态机
    大家好,这里是每周都在陪你进步的网管~!本节我们讲一个行为型的设计模式--状态模式,并通过Golang示例进行实战演示。状态模式(StatePattern)也叫作状态机模式(StateMachinePattern)状态模式允许对象的内部状态发生改变时,改变它的行为,就好像对象看起来修改了它实例化的类,状态模式是一种......
  • MongoDB入门介绍
    MongoDB简介MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库数据特征数据存储量较大,甚至是海量对数据读写的响应速度要求较高某些数据安全性要求不高,可以接受一定范围内的误差MongoDB存储......
  • 通过安装GVM 安装GO 操作步骤
    转载请注明出处:1.GVMGVM是GoVersionManager的缩写,是一个用于管理Go语言版本的工具。通过GVM,我们可以轻松地安装、切换和卸载不同版本的Go语言。GVM会在用户的home目录下创建一个名为.gvm的隐藏文件夹,其中包含已安装的Go版本和相关的配置文件。通过GVM安装Go的......
  • Go 语言之自定义 zap 日志
    Go语言之自定义zap日志zap日志:https://github.com/uber-go/zap一、日志写入文件zap.NewProduction、zap.NewDevelopment是预设配置好的。zap.New可自定义配置zap.New源码这是构造Logger最灵活的方式,但也是最冗长的方式。对于典型的用例,高度固执己见的预设(NewProdu......
  • 老外最喜欢用的15款社交软件,不回邮件就去这里找他!
    外贸人不仅要懂得跟外国客户谈生意……私底下的问候、关心、聊天也必不可少。其实很多老外都不喜欢来回发邮件,他们大多数时间都是泡在社交软件上。如果能掌握外国客户常用的几款社交软件,并了解对方的喜好和生活习惯,就可以有更多的谈资和切入点引起对方的注意哦!下面贸小七就来介绍几......