开发者社区> 潘志闻> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Golang发送邮件

简介: 简述 Go 提供了一个 smtp(Simple Mail Transfer Protocol - 简单邮件传输协议)库作为其网络包的一部分,“net/smtp”公开了一些可立即使用的有用功能。 Gomail - 一个比较成熟的第三方包,提供了一个快速、简单的解决方案,可以轻松地发送电子邮件。 简述 Gomail 特性 使用 常用邮箱 开启服务 Go
+关注继续查看

简述

Go 提供了一个 smtp(Simple Mail Transfer Protocol - 简单邮件传输协议)库作为其网络包的一部分,“net/smtp”公开了一些可立即使用的有用功能。

Gomail - 一个比较成熟的第三方包,提供了一个快速、简单的解决方案,可以轻松地发送电子邮件。

Gomail

Gomail 是一个简单、高效的发送电子邮件包,它经过良好的测试和记录。

Gomail 只能使用 SMTP 服务器发送电子邮件,但是 API 比较灵活的,很容易实现其他方法使用本地 Postfix、API 等发送电子邮件。

项目地址:https://github.com/go-gomail/gomail

文档:https://godoc.org/gopkg.in/gomail.v2

示例:https://godoc.org/gopkg.in/gomail.v2#example-package

特性

Gomail 支持:

  • 附件
  • 嵌入图像
  • HTML 和文本模板
  • 特殊字符的自动编码
  • SSL 和 TLS
  • 使用相同的 SMTP 连接发送多封电子邮件

使用

下载 Gomail,解压缩至 $GOPATH\src(例如:E:\Works\Golang\src),新建并编写 sendMail.go:

package main

import (
    "gomail"
)

func main() {
    m := gomail.NewMessage()
    m.SetAddressHeader("From", "550755606@qq.com", "一去、二三里")  // 发件人
    m.SetHeader("To",  // 收件人
        m.FormatAddress("********@163.com", "乔峰"),
        m.FormatAddress("********@qq.com", "郭靖"),
    )
    m.SetHeader("Subject", "Gomail")  // 主题
    m.SetBody("text/html", "Hello <a href = \"http://blog.csdn.net/liang19890820\">一去丶二三里</a>")  // 正文

    d := gomail.NewPlainDialer("smtp.qq.com", 465, "550755606@qq.com", "*********")  // 发送邮件服务器、端口、发件人账号、发件人密码
    if err := d.DialAndSend(m); err != nil {
        panic(err)
    }
}

运行:go run sendMail.go,发送成功之后,就能收到邮件了。

这里写图片描述

常用邮箱

列举一些常用的邮箱,可以用来测试:

  • QQ 邮箱
    POP3 服务器地址:qq.com(端口:995)
    SMTP 服务器地址:smtp.qq.com(端口:465/587)

  • 163 邮箱:
    POP3 服务器地址:pop.163.com(端口:110)
    SMTP 服务器地址:smtp.163.com(端口:25)

  • 126 邮箱:
    POP3 服务器地址:pop.126.com(端口:110)
    SMTP 服务器地址:smtp.126.com(端口:25)

开启服务

出于邮箱安全的考虑,很多邮箱缺省是关闭 POP3/SMTP 服务的,需要登录邮箱设置后开启。

以 QQ 邮箱为例,进入邮箱“设置”,在“帐户”项里就可找到“POP3/SMTP服务”的设置项,进行开启。

这里写图片描述

温馨提示:登录第三方客户端时,密码框请输入“授权码”进行验证。

也就是说,在使用 QQ 邮箱发送邮件的时候,需要使用授权码,而不是 QQ 密码!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Go语学习笔记 - defer | 从零开始Go语言
Go语学习笔记 - defer | 从零开始Go语言
20 0
Go语学习笔记 - 条件语句 | 从零开始Go语言
Go语学习笔记 - 条件语句 | 从零开始Go语言
17 0
Go语学习笔记 - 读写锁 | 从零开始Go语言
Go语学习笔记 - 读写锁 | 从零开始Go语言
31 0
Go语学习笔记 - 互斥锁 | 从零开始Go语言
Go语学习笔记 - 互斥锁 | 从零开始Go语言
24 0
Go语言 反射
1. reflect 包 1.1 获取变量类型 1.2 断言处理类型转换 2. ValueOf 2.1 获取变量值 2.2 类型转换 3. Value.Set 3.1 设置变量值 3.2 示例
128 0
Go语言之反射
和Java语言一样,Go也实现运行时反射,这为我们提供一种可以在运行时操作任意类型对象的能力。比如我们可以查看一个接口变量的具体类型,看看一个结构体有多少字段,如何修改某个字段的值等。 TypeOf和ValueOf 在Go的反射定义中,任何接口都会由两部分组成的,一个是接口的具体类型,一个是具体类型对应的值。
1133 0
Go语言之单元测试
什么是单元测试 相信我们做程序员的,对单元测试都不陌生。单元测试一般是用来测试我们的代码逻辑有没有问题,有没有按照我们期望的运行,以保证代码质量。 大多数的单元测试,都是对某一个函数方法进行测试,以尽可能的保证没有问题或者问题可被我们预知。
1116 0
+关注
潘志闻
互联网挖掘者
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Golang微服务
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载