电子邮件协议及GO发送QQ邮件

电子邮件协议及GO发送QQ邮件,第1张

概述一、电子邮件的工作机制 提供电子邮件服务的协议叫做:**SMTP(Simple Mail Transfer Protocol)**为了能够高效安全的进行数据的传输,SMTP协议底层使用的TCP实现两端

目录一、电子邮件的工作机制1.1 SMTP1.2 POP31.3 IMAP二、邮件地址三、MIME信息四、使用golang发送qq邮件

一、电子邮件的工作机制

提供电子邮件服务的协议叫做:SMTP(Simple Mail Transfer Protocol)为了能够高效安全的进行数据的传输,SMTP协议底层使用的TCP实现两端的连接。

早期的电子邮件收发的工作机制如上图所示。发送端和接收端之间通过SMTP底层的TCP简历连接。通过网络直接将邮件发送到对方的磁盘上。

但是问题也随之而来:

如果接收方没有开机,或者开机了但是没有连接网络,那么就不能通过SMTP协议建立连接,这时发送端只能是个隔一段时间后重试,直到接收端开机了,联网了,发送端才能成功的将邮件发送给接收方。问题很明显,接收方只要不开机,发送方的邮件就不能发送出去,如果是东方国家和西方国家之间的两个人各自在各自的白天才开机,那岂不是他们之间的邮件根本不可能发送出去了?

为了解决这个问题,邮件服务器出现了:

这时收发邮件的工作机制就演变成了上图那样。发送方 面向 邮件服务器发送邮件,而不管接收方是否开机,是否联网,接收方通过上线后使用POP3(Post Office Proto-col)从邮件服务器接收邮件。

整个过程中,邮件服务器是不会断电的。

1.1 SMTP

通过上图可以看到,SMTP是发送电子邮件时使用的协议。 它底层使用tcp的25号端口。在这个tcp连接上进行控制,应答,以及数据的传输。

客户端以文本的方式发送请求,邮件服务器每次回复3位数字作为应答。比如客户端首次会发送 HELO<domain>表示请求建立连接。正常的话邮件服务器会回复250,表示完成请求命令。

SMTP协议中规定,以'.'最为邮件正文的结束符。当正文前面有一个'.'或者有两个'.' 都要进行特殊处理。

SMTP不会校验发送者,所以我们经常会收到垃圾邮件,据说也会有“POP before SMTP” 和“SMTP认证”机制,来防止冒充发送人。从而减少垃圾邮件的数量。

1.2 POP3

POP服务器也是一台一直处于充电状态的服务器。

客户端通过pop3协议从pop服务器上接收发送方发过来的协议,但是在接收之前是需要进行用户身份验证的,也就是说,客户端得将自己的账号密码发送到POP服务器,通过验证后才能取回属于自己的邮件

POP与SMTP一样,都是基于TCP连接完成相应的 *** 作的。

1.3 IMAP

IMAP和POP协议一样都是接收电子邮件时使用的协议。

如果使用IMAP,即使不用将电子邮件下载到本地也可以阅读。因为IMAP实现了字啊服务端处理MIME类型的数据,所以他能实现当一封电子邮件有10个附件时,它能直接打开其中的某一个。而且在服务端作出已读/未读,等状体的修改。

二、邮件地址

邮件地址通常都是由两部分组成: 名称@地址

常见的像 123@qq.com 这种邮件的地址。

123就是名称,qq.com就是地址。 电子邮件的地址和域名构造相同,后面的com是顶级域名。

现在的电子邮件地址由DNS统一管理。DNS里面存储着各个邮件地址,和这个邮件地址作为发送地址时所对应的邮件服务器的域名信息。我们把这种映射关系称为MX记录。因为方才说了,对现在的邮件发送机制来说,发送者是将邮件发送到邮件服务器上。那通过查询DNS中的MX记录,就能知道xxx@qq.com. xxx@163.com 这种不同的邮件后缀所对应的邮件服务器的域名,通过域名进一步找到这个机器。

三、MIME信息

最初的很长一段时间里,邮件只能发送文本信息。后台能发送的数据类型已经被拓展到了MIME。可以发送诸如gif,vIDeo,png,jpg,jpeg,text/plain 等等类型的数据。具体发送啥样的信息,通过Content-Type定义。

四、使用golang发送qq邮件

实例代码如下:

package mailimport (	"strconv")import "gopkg.in/gomail.v2"func SendMail(mailTo []string,subject string,body string) error {  	mailConn := map[string]string{		"user": "6464xxxx8@qq.com",// 邮件发送者的地址		"pass": "trsxxxxxxxxxxcd",// QQ邮箱填授权码,百度一下获取方式。		"host": "smtp.qq.com",// 发送将邮件发送给腾讯的smtp邮件服务器		"port": "465",// 发送邮件使用的端口	}	port,_ := strconv.Atoi(mailConn["port"])  	m := gomail.NewMessage()	m.Setheader("From",m.FormatAddress(mailConn["user"],"自动化成绩查询"))	m.Setheader("To",mailTo...)    //发送给多个用户	m.Setheader("Subject",subject) //设置邮件主题	 m.Setbody("text/HTML",body)    //设置邮件正文  	d := gomail.NewDialer(mailConn["host"],port,mailConn["user"],mailConn["pass"])	err := d.DialAndSend(m)	return err}	/*	发送邮件	stuEmail:学生的邮箱	subject:标题	body:发送的内容  */func DoSendMail(stuEmail,subject,body string) (e error) {	mailTo := []string{stuEmail}	err := SendMail(mailTo,body)	if err != nil {		e = err		return e	}	return nil}//func main() {//	//定义收件人//	mailTo := []string{//		"2693xxxx8@qq.com",//		"196xxxxx30@qq.com",//	}//	//邮件主题为"Hello"//	subject := "Hi 出成绩了"//	// 邮件正文//	body := "请查收您的新成绩"////	err := SendMail(mailTo,body)//	if err != nil {//		log.Println(err)//		fmt.Println("send fail")//		return//	}//	fmt.Println("send successfully")//}
总结

以上是内存溢出为你收集整理的电子邮件协议及GO发送QQ邮件全部内容,希望文章能够帮你解决电子邮件协议及GO发送QQ邮件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1259794.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存