• 使用 golang 发送简单邮件


    源码

    package main
    
    import (
    	"gopkg.in/gomail.v2"
    	"log"
    )
    
    type mail struct {
    	senderAddr    string   // 发件人地址
    	senderName    string   // 发件人名称
    	receiverAddr []string // 收件人地址,可以有多个收件人
    	subject       string   // 邮件主题
    	text          string   // 正文
    	host          string   // 邮件服务器地址
    	port          int      // 邮件服务器端口号
    	username      string   // 用户名
    	password      string   // 密码或授权码
    }
    
    func main() {
    	m := mail{
    		senderAddr:    "sender@163.com",
    		senderName:    "senderName",
    		receiverAddr: []string{"receiver@163.com", "receiver@163.com"},
    		subject:       "subject",
    		text:          "test",
    		host:          "smtp.163.com",
    		port:          25,
    		username:      "username@163.com",
    		password:      "password",
    	}
    	SendMail(&m)
    }
    
    func SendMail(s *mail) {
    	m := gomail.NewMessage()
    	m.SetHeaders(map[string][]string{
    		"From":    {m.FormatAddress(s.senderAddr, s.senderName)}, // 发件人邮箱,发件人名称
    		"To":      s.receiverAddr,                               // 多个收件人
    		"Subject": {s.subject},                                   // 邮件主题
    	})
    	m.SetBody("text/plain", s.text)
    	d := gomail.NewDialer(s.host, s.port, s.username, s.password) // 发送邮件服务器、端口号、发件人账号、发件人密码
    	if err := d.DialAndSend(m); err != nil {
    		log.Println("send mail err:", err)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    常见邮箱服务器地址和端口号

    163 邮箱:

    POP3 服务器地址:pop.163.com(端口:110)

    SMTP 服务器地址:smtp.163.com(端口:25 / 465)

    126 邮箱:

    POP3 服务器地址:pop.126.com(端口:110)

    SMTP 服务器地址:smtp.126.com(端口:25)

    QQ 邮箱

    POP3 服务器地址:qq.com(端口:995)

    SMTP 服务器地址:smtp.qq.com(端口:465 / 587)

    注意事项

    部分邮箱是默认关闭 POP3/SMTP 服务的,需要手动开启,比如 QQ 邮箱。
    部分邮箱第三方登录时,不使用密码,使用授权码。

    发邮件协议和端口

    非加密端口

    25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。

    加密端口

    465端口(SMTP SSL):465端口是为SMTP SSL(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

    收邮件协议和端口

    非加密端口

    143端口(IMAP):143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的。

    110端口(POP3):110端口是为POP3(Post Office Protocol Version 3,邮局协议3)服务开放的,是用于接收邮件的。

    很多邮箱服务提供商简写为不加3的pop(如126邮箱的 pop.126.com)。

    加密端口

    993端口(IMAP SSL):993端口是为IMAP SSL(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

    995端口(POP3 SSL):995端口是为POP3 SSSL(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

    IMAP与POP3有什么区别?

    POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上。

    而IMAP协议提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

  • 相关阅读:
    阿里资深专家打造从零开始学架构,含阿里内部技术栈PPT、PFD实战
    javaWeb项目中:连接mysql的驱动问题
    耗时半天,我使用 Python 构建电影推荐系统
    Java网络通信:IP、端口、协议、IP地址操作类-InetAddress
    论文阅读笔记 | 三维目标检测——PointNet
    常态化防疫下,社区该如何快速收集防疫信息?
    C++知识精讲12——取整方式及实战讲解【全网最详细取整“集合”】
    5 种常见的 async/await 误用
    docker创建容器相关命令【详细版】
    Nginx--Rewrite重写
  • 原文地址:https://blog.csdn.net/toywish/article/details/126127564