.NET开发邮件发送功能的全面教程(含邮件组件源码)(1)

作者:   出处:互联网   2015-07-04 23:22:24   阅读:1

今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能。在网上搜的到的各种资料一般都介绍的比较简单,那今天想比较细的整理介绍下。

1) 邮件基础理论知识


 

2) 邮件发送相关.NET类库


 

3) 介绍开发的一个发送邮件的小组件(MailHelper)


 

4) MailHelper组件的一个示例以及几种方式发邮件的优劣测试


 

示例及组件源码:


 

.NET开发邮件发送功能的全面教程(含邮件组件源码).rar


 

邮件基础理论知识


 

什么业务需要邮件功能?


 

1. 服务提供方:需提供邮件收发客户端或Web服务。(eg:Outlook、QQ邮箱)。当然这些服务都是知名商提供。若是一般的小网站提供的邮件收发服务,不知道节操如何,谁敢用呢?就算你用了,别的知名商SMTP服务器也不认可从这小网站发出的邮件,出现SMTP服务器拒收来源邮件(视为恶意邮件或垃圾邮件)。


 

2. 安全性、机密性:比如某安全部门需要提供自己发邮件的SMTP服务器和收邮件POP3服务器以及相应的操作软件


 

3. 电子商务、论坛等会员机制社区:主家需要向会员发送通知信息,比如:密码重置、降价通知、留言通知、回复通知、订阅通知、会员间交流等等。主家保证邮箱有效性的办法常常是通过会员注册、更换邮箱时发送 激活邮件 。


 

4. 邮件营销:在大数据时代的现在,企业可以根据所掌握的数据预测客户的需求,来提供主动推送营销消息的功能;当然也有没有预测能力的小商家通过邮件群发器进行撒网式邮件营销。


 

5. 等等


 

什么是电子邮件协议?


 

当前常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇。


 

1. SMTP


 

Simple Mail Transfer Protocol(即简单邮件传输协议),它是一组用于从源地址到目的地址传送邮件的规则,简单的说就是:From-- To的传送规则。由SMTP来控制信件中转的方式。SMTP属于TCP/IP家族中的一员,它帮助每一台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-Mail寄到收信人的服务器上。SMTP服务器则是遵循SMTP协议的邮件发送服务器,用来中转你发出的电子邮件。


 

SMTP目前已是事实上的E-Mail传输的标准。


 

2. POP3


 

Post Office Protocol 3(即邮局协议的第3个版本),负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务之一:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。


 

POP3是因特网电子邮件的第一个离线协议标准。


 

3. IMAP4


 

Internet Message Access Protocol 4(即交互式数据消息访问协议第四个版本),提供脱机和联机访问功能。是一种优于POP的新协议,是美国斯坦福大学在1986年开始研发的多重邮箱电子邮件系统。和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但IMAP克服了POP的一些缺点。例如,请求邮件服务器只下载所选中的邮件而不是全部邮件。客户机可先阅读邮件信息的标题和发送者的名字再决定是否下载这个邮件。通过用户的客户机电子邮件程序,IMAP可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。


 

默认情况下,当 IMAP4 电子邮件应用程序将电子邮件下载到客户端计算机,下载邮件的副本会保留在电子邮件服务器上。正是由于用户的电子邮件副本保留在电子邮件服务器上,用户可以从多台计算机上访问相同的电子邮件。也可以实现电子邮件服务器上的多个文件夹与客户端计算机上的多个文件夹同步。


 

SMTP/POP3工作方式如图:


 

image


 

TCP的3次握手和4次挥手?


 

详细可见《TCP3次握手/4次握手》


 

在 TCP 数据段报头中,有六个包含控制信息的 1 bit字段,用于管理 TCP 进程。这些字段分别是:


 

URG 紧急指针


 

ACK 确认字段


 

PSH 推送功能


 

RST 重置连接


 

SYN 同步序列号


 

FIN 发送方已传输完所有数据


 

这些字段用作标志,由于它们都只有 1 bit大小,所以它们都只有两个值:1 或者 0。当值设为 1 时,表示数据段中包含控制信息。


 

1. 三次握手,建立连接


 

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。


 

1) 建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。


 

2) 服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。


 

3) 客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。


 

image


 

 


 

2. 四次挥手,关闭连接


 

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。


 

1) 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。


 

2) 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。


 

3) 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。


 

4) 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。


 

image


 

3. 为什么建立连接协议是三次握手,而关闭连接却是四次挥手呢?


 

建立连接时,服务端LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN放在一个报文里来发送。


 

关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以关闭连接的ACK报文和FIN报文多数情况下都是分开发送的。

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat