邮件发送的原理

      最近看了一下邮件发送的相关原理,在网上找了一些资料,基本弄清楚了基本流程,在这里记录一下,欢迎你们拍砖。服务器

 

概述网络

     电子邮件是因特网上使用得很是多的一种应用,它能够很是方便的使相隔很远的人进行通讯。它主要的特色就是操做简单,快捷。当你发送一封邮件的时候,它首先会发送到收件人的邮件服务器上,并放入收件人的信箱中。(若是你在某一个邮件服务器提供商那里申请了一个邮箱帐号,那么你在这个邮件服务器上面就有一个电子信箱)。收件人只须要定时读取它的电子信箱,就能够接收别人发送过来的信件,并与别人进行通讯了。app

 

基本组成部分:测试

      一个简单的邮件系统,应该包含三部分:首先是邮件服务器,而后是用户代理和邮件传送协议。 google

    邮件服务器就是一个供在网上存储邮件的空间。通常每一个邮件服务器的提供商都有本身的邮件服务器,只要你申请了他的邮箱帐号,你就会在他的邮件服务器上拥有本身邮箱。像Google,腾讯都是邮件服务的提供商,他们都有本身的邮件服务器,若是你申请了Gamil邮箱,那么在Google的邮件服务器上面,你就有本身的一块存储空间了。一样,若是你申请了qq邮箱,那么在qq邮件服务器上面也有你本身的空间了,也就是你的邮箱。当你要收取信件的时候,你就须要链接到不一样的服务器上面。不一样的邮件服务提供商,他们的邮件服务器的地址是不同的。后面会介绍一些经常使用的邮件服务器的地址。编码

     用户代理也就是你用来从邮件服务器上读取或者发送邮件到邮件服务器上的一个软件。好比经常使用的OutLook,Foxmail等等。咱们知道,咱们的邮件都是存储在邮件服务器上面的,咱们发送邮件的时候,去往邮件服务器上面发,咱们收取邮件的时候,也须要从服务器上面读。为了方便的完成这些工做,咱们就须要用户代理。spa

      邮件传送协议是指邮件在传送过程当中必须遵照的约定,它规定了不一样的服务器(或客户端)之间应如何交换信息。比较常见的有邮件服务器之间的通讯协议SMTP以及用户代理与邮件服务器之间的通讯协议POP3。(注意:邮件服务器之间的协议是使用SMTP,用户发送邮件到邮件服务器使用的仍是SMTP协议,用户从邮件服务器读取邮件用的才是POP3协议)。.net

 

基本流程:计算机网络

image

截图来自谢希仁《计算机网络》代理

      邮件的收发过程:

1. 发信人在用户代理上编辑邮件,并写清楚收件人的邮箱地址;

2. 用户代理根据发信人编辑的信息,生成一封符合邮件格式的邮件;

3. 用户代理把邮件发送到发信人的的邮件服务器上,邮件服务器上面有一个缓冲队列,发送到邮件服务器上面的邮件都会加入到缓冲队列中,等待邮件服务器上的SMTP客户端进行发送;

4. 发信人的邮件服务器使用SMTP协议把这封邮件发送到收件人的邮件服务器上(它会自动根据收件人的邮箱来分析出收件人的邮箱服务器);

5. 收件人的邮件服务器收到邮件后,把这封邮件放到收件人在这个服务器上的信箱中;

6. 收件人使用用户代理来收取邮件。首先用户代理使用POP3协议来链接收件人所在的邮件服务器,身份验证成功后,用户代理就能够把邮件服务器上面的收件人邮箱里面的邮件读取出来,并展现给收件人。

    下面以一个简短的例子来讲明这个过程:

     好比Tom要给Lucy发一封邮件,邀请她明天晚上一块儿看电脑。首先TOM会打开OutLook(用户代理),第一次使用用户代理时,须要进行相关的配置,详细的配置过程见后面的例子。咱们先假设Tom已经配置好用户代理.Tom打开OutLook后,首先会填写收件人的邮箱,而后是邮件的主题以及邮件的内容,写好以后,点击发送。OutLook就会把这封邮件发送到Tom邮箱的服务器上面(好比Tom申请的是Gmail邮箱,那么这封邮件就会发送到Gmail的邮件服务器上面,这个邮件服务器的地址通常会由邮件服务商给出,在第一次配置OutLook时,就须要填写这个地址)。Tom邮箱服务器上面的SMTP客户端就根据收件人的地址,找到收件人所在的邮箱服务器,而后与收件人邮件服务器上面的SMTP端创建一个TCP链接,通过三次握手后,这封邮件就会经过这个链接传送到收件人的邮件服务器上面,也就是Lucy的邮箱服务器上面。若是Lucy须要收取邮件,它也须要一个用户代理,就假设她用的也是OutLook(她在第一次使用OutLook时,也要配置她的邮箱服务器地址),启动OutLook后,OutLook会每隔一段时间(这个时间能够由用户本身设置)去链接邮箱服务器,判断是否收到新的邮件,若是收到了新的邮件,就使用POP3协议把这封邮件读取出来,并经过OutLook显示给Lucy看。Lucy看到邮件后,答应了Tom的请求,她就会向Tom回复一封邮件,回复邮件的过程与上面的过程是同样的,这里就不细说了。

 

协议简介:SMTP

     SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。SMTP是创建在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。(来自百度百科

 

协议简介:POP3

     POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定我的计算机如何链接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议容许用户从服务器上把邮件存储到本地主机(即本身的计算机)上,同时根据客户端的操做删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。(来自百度百科

POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以链接服务器,并下载全部未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到我的终端机器上,通常是 PC机或 MAC。一旦邮件发送到 PC 机或 MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大均可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。(来自百度百科

 

协议简介:IMAP

      Internet Mail Access Protocol(交互式邮件存取协议)IMAP是斯坦福大学在1986年开发的研发的一种邮件获取协议。它的主要做用是邮件客户端(例如MS Outlook Express)能够经过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户能够不用把全部的邮件所有下载,能够经过客户端直接对服务器上的邮件进行操做。

IMAP协议比较酷的功能是用户能够维护本身在服务器上的邮件目录;能够直接抓取邮件的特定部分(例如只有文本)。(来自百度百科

      IMAP的一个与POP3的区别是:IMAP它只下载邮件的主题,并非把全部的邮件内容都下载下来,而是你邮箱当中还保留着邮件的副本,没有把你原邮箱中的邮件删除,你用邮件客户软件阅读邮件时才下载邮件的内容。较好支持这两种协议的邮件客户端有:ThunderMail,Foxmail,outlook等。(来自百度百科

 

协议简介:Mime

     因为SMTP这个协议开始是基于纯ASCⅡ文本的,在二进制文件上处理得并很差。后来开发了用来编码二进制文件的标准,如MIME,以使其经过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本同样简单。(来自百度百科

 

在.NET中如何实现:

    在.NET中,已经有实现邮件发送的相关类,在System.Net.Mail命名空间下,有实现SMTP链接的SmtpClient类,还有封装邮件信息的实体类MailMessage。咱们首先须要用给定的服务器地址和端口号实例化一个SmtpClient对象;

   1:  
   2: SmtpClient smtp = new SmtpClient(smtpHost, smptPort);
3:smtp.Credentials = new NetworkCredential("test.qq.com", "test008");

   而后定义一个MailMessage对象,MailMessage对象里面包括了一封标准邮件所须要的全部信息,好比收件人,邮件主题,邮件内容等。你只须要对相关的属性赋值便可,

   1: MailMessage msg = new MailMessage(sender, receivers, title, content);
   2: msg.BodyEncoding = Encoding.UTF8;
   3: msg.SubjectEncoding = Encoding.UTF8;
   4: msg.IsBodyHtml = true;
   5: smtp.Send(msg);
   6: msg.Dispose();

    赋值完毕后,调用smtp.Send(msg);邮件便可发送出去。注意,若是有身份验证的话,还须要输入你的用户名和密码。msg.CC.Add(new MailAddress("test002qq.com"));这样能够增长抄送人;msg.Attachments.Add()能够增长相应的附件。还有其余一些用法参见文章最后的参考网址。

 

经常使用的邮件服务器地址:(如下数据来自网络)

126邮箱

POP3服务器:pop.126.com 
SMTP服务器:smtp.126.com

163邮箱

POP3服务器:pop.163.com 
SMTP服务器:smtp.163.com

 

yahoo邮箱

注意:yahoo在foxmail 4.1以上的版本设置以下:

POP3服务器:pop.mail.yahoo.com.cn 
SMTP服务器:smtp.mail.yahoo.com.cn

 

Sohu邮箱

POP3服务器:pop3.sohu.com 
SMTP服务器:smtp.sohu.com

 

Gmail邮箱

第一步:要手动配置: POP3服务器是pop.gmail.com 
SMTP服务器是smtp.gmail.com 
第二步:使用自动配置文件 http://toolbar.google.com/gmail-helper/GmailConfig.exe 
这样就OK喽~ 能够发送和接收 Gmail 邮件了。

QQ邮箱

  POP3服务器:pop.qq.com 
SMTP服务器:smtp.qq.com 
SMTP服务器须要身份验证

 

从上面你们能够看出,通常的POP3邮件服务器地址为pop而后加上本身的域名,SMTP邮件服务器地址为smtp加上本身的域名。经常使用的邮件服务器地址均可以在网上找到。各大型邮箱smtp服务器及端口收集 

 

遇到的问题:

     当我用qq邮箱测试时,发现邮件并无发送成功。找了半天缘由,才发现原来是个人QQ邮箱的SMTP服务没有启用,若是你按照上面的代码,也没有发送成功,有可能也是这个缘由。咱们只须要进入本身的邮箱,把这个服务启用便可。

     首先登陆QQ邮箱,选择“邮箱设置”的“帐户”一栏

image

     而后往下浏览到“POP3/IMAP/SMTP/Exchange服务”这个地方,打上对勾便可。

image

     有没有发现上面的单词那么熟悉,就是上面讨论的几种协议,如今发现理解是否是更容易了。QQ邮箱作得比较好,若是你尚未理解这些协议的意思,你能够点击后面的超连接,里面有更详细的解释。

 

配置用户代理:

    若是你理解了上面的内容,配置用户代理将是一件很是容易的事情。这里以FoxMail为例,解释一个地方就能够了,就是设置邮件服务器。(截图来自QQ邮箱里面的“帮助”)

image

    上面的接收服务器类型,你能够选择POP3,也能够选择IMAP,选择了什么类型的,下面的地址中就应该输入这个类型的邮件服务器地址。最下面的是发送邮件服务器,这个没得选,非要写SMTP邮件服务器的地址。对于其余设置,你彻底能够登陆进入QQ邮箱,里面的帮助说的很是详细,并且网上也有许多配置用户代理的资料,能够参考。

 

总结

     上面的就是邮件发送的一些基本知识,大部份内容网上都有,我这里只是把它串起来,但愿对你们有帮助,若是有任何错误,请指正。还有一点要说明的是,.NET中封装的“太好”了,彻底对咱们屏蔽了实现的具体细节,若是想深刻研究,彻底能够本身写一个发送邮件的类,实现SMTP通讯,而不使用.NET中的SMTPClient类,若是你们有兴趣,能够继续研究。

相关文章
相关标签/搜索