基于STMP与POP3协议的邮件发送与接收
电子邮件传输协议

电子邮件传输协议电子邮件作为互联网上最广泛使用的应用之一,其传输机制和相关协议对确保邮件的可靠和高效传递至关重要。
本文旨在概述电子邮件传输过程中涉及的主要协议,包括SMTP、POP3、IMAP以及MIME等。
简单邮件传输协议(SMTP)SMTP是用于发送邮件的标准协议,工作在TCP/IP协议族的应用层。
它定义了邮件客户端与邮件服务器之间、以及邮件服务器之间的通信规则。
SMTP通过命令和响应的交换来实现邮件的发送,其中“发件人”将邮件推送到“收件人”的邮件服务器上。
尽管SMTP最初设计为发送ASCII文本,但它已经扩展支持多用途互联网邮件扩展(MIME),从而可以传输各种类型的数据。
邮局协议版本3(POP3)POP3是一种允许用户从邮件服务器接收邮件的协议。
当邮件被发送至用户的邮箱后,用户可以通过POP3协议从服务器下载邮件到本地计算机或设备上。
一旦邮件被下载,它通常会从服务器上删除,除非用户设置保留副本。
POP3适用于不需要经常访问邮件的用户,因为它不支持邮件的离线存储和管理。
互联网消息访问协议(IMAP)与POP3不同,IMAP协议提供了更为复杂的邮件管理功能。
IMAP允许用户在邮件服务器上创建文件夹并组织邮件,同时可以在多个设备间同步这些信息。
这意味着用户可以在任意设备上访问相同的邮件状态,包括已读、未读状态及邮件的存储位置。
IMAP特别适合需要频繁访问和处理大量邮件的用户。
多用途互联网邮件扩展(MIME)MIME标准扩展了SMTP的功能,使其能够发送非ASCII数据,包括二进制文件、图像、声音等多种格式。
MIME通过定义不同的内容类型和传输编码,使得电子邮件系统能够处理复杂和非文本的数据。
这种扩展性极大地增加了电子邮件的实用性,使其成为现代通信不可或缺的一部分。
总结而言,电子邮件传输协议是确保电子邮件系统有效运作的基础。
SMTP、POP3、IMAP和MIME各自扮演着重要的角色,共同构成了现代电子邮件系统的技术支柱。
常用电子邮件协议服务POP3、IMAP、SMTP、Exchange

常⽤电⼦邮件协议服务POP3、IMAP、SMTP、Exchange POP3/SMTP服务1. POP协议:接收邮件本地和服务器不同步,⽤于下载服务器上的邮件在本地的操作不会反馈到服务器上2. SMTP协议:发送邮件3. 邮件接收⽅式:定期向服务器查询新邮件4. ⽀持的客⼾端:Foxmail;Outlook;等5. ⽀持的移动终端:iPhone;Android;等IMAP/SMTP服务1. IMAP协议:接收邮件本地和服务器同步,⽤于操作服务器上的邮件在本地的操作会反馈到服务器上交互式邮件存取协议,本地和浏览器上的内容⼀致⽀持收件箱、未读邮件、发件箱、⽂件夹、草稿的同步2. SMTP协议:发送邮件3. 邮件接收⽅式:定期向服务器查询新邮件4. ⽀持的客⼾端:Foxmail;Outlook;等5. ⽀持的移动终端:iPhone;Android;等Exchange服务1. Microsoft Exchange 服务:收发邮件本地和服务器同步,⽤于操作服务器上的邮件在本地的操作会反馈到服务器上交互式邮件存取协议,本地和浏览器上的内容⼀致⽀持收件箱、未读邮件、发件箱、⽂件夹、草稿的同步同步移动设备的通讯录、联系⼈、⽇历、⽇程、任务等。
2. 邮件接收⽅式:实时推送新邮件3. ⽀持的移动终端:Android;等POP3/IMAP/Exchange对⽐服务协议接收⽅式同步性同步内容POP3定期查询不同步⽆IMAP定期查询同步收件箱、未读邮件、发件箱、⽂件夹、草稿Exchange实时推送同步收件箱、未读邮件、发件箱、⽂件夹、草稿通讯录、联系⼈、⽇历、⽇程、任务等版权声明:本⽂为「」原创,依据许可证进⾏授权,转载请附上原⽂出处链接及本声明。
微信公众号:关注微信公众号,获取即时推送。
SMTP协议中的邮件发送与接收过程解析

SMTP协议中的邮件发送与接收过程解析在互联网世界中,电子邮件已成为人们生活中不可或缺的一部分。
而SMTP(Simple Mail Transfer Protocol)协议,则是电子邮件发送与接收过程中的核心协议。
本文将对SMTP协议中的邮件发送与接收过程进行解析。
一、SMTP协议简介SMTP是一种用于发送和传输电子邮件的协议,它是基于文本的协议,使用可读的ASCII码。
SMTP服务器端口一般为25端口。
SMTP 协议通过TCP连接进行通信,并在无差错处理和重传机制等方面进行了优化。
二、邮件发送过程解析首先,我们来看一下邮件发送的过程。
1. 发送端建立TCP连接发送方的客户端通过向SMTP服务器的25端口发起TCP连接,以建立与服务器的通信通道。
2. 握手协商发送方客户端通过向服务器发送握手请求,握手过程包括客户端标识、服务扩展、身份验证等步骤。
3. 邮件发送准备发送方客户端准备邮件内容,并将邮件信息发送给SMTP服务器。
4. 发送方身份验证SMTP服务器对发送方进行身份验证,以确定发送方是否有权发送邮件。
5. 邮件传输发送方客户端将邮件信息以规定的格式发送给SMTP服务器。
邮件内容包括邮件头和邮件体,邮件头包含发件人、收件人、主题等信息,而邮件体则是实际的邮件内容。
6. 邮件排队SMTP服务器将收到的邮件排队等待传输。
7. 邮件传输完成SMTP服务器将邮件转发给接收方的SMTP服务器。
三、邮件接收过程解析接下来,我们来看一下邮件接收的过程。
1. 接收端与SMTP服务器建立连接接收方的客户端通过向SMTP服务器的25端口建立TCP连接,以建立与服务器的通信通道。
2. 握手协商接收方客户端通过与服务器进行握手,进行服务扩展和身份验证等步骤,以确保连接的可用性和安全性。
3. 邮件查询接收方客户端向SMTP服务器发出查询命令,请求获取待接收的邮件。
4. 接收邮件SMTP服务器根据查询命令,将待接收的邮件发送给接收方客户端。
邮件协议分析(POP3IMAPSTMP

邮件协议分析(POP3IMAPSTMP邮件协议是用于在网络上传输和接收电子邮件的一系列规范和技术。
在互联网上,最常用的邮件协议是POP3、IMAP和SMTP。
本文将对这三种协议进行详细分析。
2. IMAP(Internet Message Access Protocol)也是一种邮件接收协议,但与POP3不同的是,IMAP在用户设备和邮件服务器之间建立了一个持久连接,可以保留邮件服务器上的副本。
这意味着用户可以在多个设备上访问和管理同一封电子邮件。
IMAP协议允许用户在不同设备间同步邮件的状态和文件夹结构,例如标记已读、删除或移动邮件。
由于IMAP保留了邮件服务器上的邮件副本,它适用于那些需要在多个设备上访问邮件的用户,例如在办公室和家中使用不同设备的用户。
3. SMTP(Simple Mail Transfer Protocol)是一种邮件传输协议,用于将邮件从发件人的邮件服务器发送到收件人的邮件服务器。
SMTP协议定义了邮件的传输规范,包括邮件的标头和正文格式,以及如何与接收邮件服务器进行通信。
SMTP协议是一种客户端-服务器协议,发件人的邮件客户端通过与发件人的邮件服务器建立连接来发送邮件,邮件服务器之间通过互联网进行邮件的传输。
SMTP协议通常与POP3或IMAP结合使用,以完成邮件的发送和接收。
总结起来,POP3、IMAP和SMTP是互联网上常用的三种邮件协议。
POP3适用于在单个设备上接收邮件的用户,IMAP适用于在多个设备上接收和管理邮件的用户,而SMTP用于发送邮件。
这三种协议各有优势和适用场景,用户可以根据自己的需求选择适合的协议来管理和传输邮件。
Java邮件收发SMTP和POP3

Java邮件收发SMTP和POP3Java邮件收发SMTP和POP3SMTP的连接和收发过程:a.建立TCP连接。
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行d.协商结束,发送邮件,用命令DATA发送e.以.表示结束输入内容一起发送出去f.结束此次发送,用QUIT命令退出。
SMTP的基本命令集:HELO 向服务器标识用户身份MAIL 初始化邮件传输mail from:RCPT 标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。
NOOP 无操作,服务器应响应OKRSET 重置会话,当前传输被取消QUIT 结束会话POP3简介:在POP3协议中有三种状态,认可状态,处理状态,和更新状态。
当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。
POP3基本命令集:USER usernamePASS passwordSTAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数LIST 返回邮件数量和每个邮件的大小RETR [Msg#] 返回由参数标识的邮件的全部文本DELE [Msg#] 服务器将由参数标识的邮件标记为删除,由quit命令执行RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令NOOP 服务器返回一个肯定的响应QUIT 更新class POP3Demo {private static String POP3Server = "";private static String USERNAME = "username";//实际应用中改成真实的用户名private static String PASSWORD = "password";//实际应用中改成真实的密码public static void main(String[] args) {int POP3Port = 110;Socket client = null;try {// 向POP3服务程序建立一个套接字连接。
应用层(SMTP和POP3协议)

应⽤层(SMTP和POP3协议)SMTP(简单邮件传输协议 Simple Mail Transfer Protocol)是建⽴在FTP⽂件传输服务上的⼀种邮件服务,主要⽤于传输系统之间的邮件信息并提供与来信有关的通知,所对应RFC⽂档为RFC821。
SMTP⽬前已是事实上的在Internet传输E-Mail的标准,是⼀个相对简单的基于⽂本的协议,⽬标是向⽤户提供⾼效、可靠地邮件传输。
它的⼀个重要特点是它能够在传送中接⼒传送邮件。
邮件是⼀种消息的格式,由信封、⾸部和正⽂组成。
信封上最重要的是收信⼈的地址。
邮件服务器⽤这个地址将邮件发送到收信⼈所在的邮件服务器上。
⾸部是由⽤户代理或邮件服务器添加的⼀些信息。
包括Received、Message-ID、From、Data、Reply-To、X-Phone、X-Mailer、To和Subject等字段。
正⽂是发送⽤户发给接收⽤户报⽂的内容。
RFC 822规定正⽂为NVT ASCII⽂字⾏。
⼀个具体的SMTP通信(如发送端邮件服务器:即客户端;与接收端服务器:即服务器端的通信)的过程是:1、客户端与服务器端建⽴TCP连接;2、客户端向服务器端发送HELO命令以标识发件⼈⾃⼰的⾝份,然后客户端发送MAIL命令,服务器端以OK响应,表明准备接收;3、客户端发送RCPT命令,以标识该电⼦邮件的计划接收⼈,服务器端则表⽰是否愿意接收邮件;4、协商结束,发送邮件,⽤命令DATA发送;5、以“.”标识结束输⼊内容⼀起发送出去没结束此次发送,⽤QUIT命令退出。
再输⼊每条命令后,都需要加上<CRLF>命令,即换⾏命令。
SMTP协议原来只能传送7位的ASCII码,不能传送⼆进制⽂件,这成了它的⼀⼤缺陷。
在之后的发展中,标准化组织在兼容SMTP的前提下,提出了传送⾮7位ASCII码的⽅法,对应的RFC⽂档有两个:邮件⾸部扩充对应于RFC1522,邮件正⽂的扩充对应与RFC1521(即MIME)。
SMTP及POP3协议分析

SMTP及POP3协议分析
SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol 3)是两种常用的电子邮件协议,用于发送和接收电子邮件。
本
文将从协议的定义、工作原理、特点和使用场景等方面进行分析。
一、SMTP协议:
SMTP协议定义了发送邮件的标准规范,主要用于邮件的发送、转发
和投递,是目前应用最广泛的邮件传输协议之一
1.工作原理:
SMTP协议基于传输控制协议(TCP)来进行通信,端口号为25,默认
使用明文传输。
邮件发送方通过SMTP客户端将邮件发送到SMTP服务器上,然后SMTP服务器根据邮件头部信息解析邮件内容,查找目标服务器并进
行中转或投递给目标服务器。
2.特点:
(2)支持多种验证方式,如口令验证、加密验证等,提高了邮件的
安全性。
(3)支持邮件的回执和重试功能,可保证邮件的可投递性。
(4)提供了邮件的分组功能,可以将多份邮件打包发送。
3.使用场景:
(1)企业内部邮件的发送和传递。
(2)通过邮件账号发送公告、通知等大批量邮件。
(3)与客户端邮件程序结合,提供发送邮件的功能。
二、POP3协议:
1.工作原理:
2.特点:
(2)只支持单一用户操作,不支持同时多用户在线。
3.使用场景:
(2)使用POP3协议在不同的邮件客户端之间同步邮件数据。
电子邮件传输原理:SMTP、POP3、IMAP协议解析

电子邮件传输原理:SMTP、POP3、IMAP协议解析电子邮件的传输过程涉及多个协议,其中最常见的是SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol 3)和IMAP(Internet Message Access Protocol)。
这些协议在电子邮件的发送、接收和访问过程中发挥着不同的作用。
以下是它们的基本解析:SMTP(Simple Mail Transfer Protocol):作用: SMTP是用于发送电子邮件的协议,负责将电子邮件从发件人的邮件客户端传输到接收人的邮件服务器。
工作原理:发件人的邮件客户端通过SMTP与发件人的邮件服务器建立连接,并使用SMTP协议将电子邮件传递给邮件服务器。
邮件服务器随后将电子邮件中转给接收人的邮件服务器。
POP3(Post Office Protocol 3):作用: POP3用于从邮件服务器上下载电子邮件到接收人的本地设备,常用于单一设备上的邮件访问。
工作原理:接收人的邮件客户端通过POP3与接收人的邮件服务器建立连接,然后下载服务器上存储的邮件到本地设备。
通常,邮件会被下载到本地设备后从服务器上删除。
IMAP(Internet Message Access Protocol):作用: IMAP也用于从邮件服务器上下载电子邮件,但与POP3不同,IMAP允许在多个设备上同步访问邮件,保留邮件服务器上的副本。
工作原理:接收人的邮件客户端通过IMAP与接收人的邮件服务器建立连接。
IMAP允许在多个设备上同步邮件的状态(已读、未读、已删除等),并在服务器上保留邮件的副本,使用户可以从不同的设备访问邮件。
在电子邮件传输过程中,通常的流程如下:发件人使用SMTP将电子邮件发送到发件人的邮件服务器。
发件人的邮件服务器使用SMTP将邮件传递给接收人的邮件服务器。
接收人可以使用POP3或IMAP从邮件服务器上下载邮件到本地设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络编程实训报告题目:基于STMP与POP3协议的邮件发送与接收姓名:学院:专业:班级:学号:指导教师:完成日期:年月日原创性声明本人郑重声明:上交的设计报告,是本人在导师的指导下,独立进行研究工作所取得的成果。
除文中已经注明引用的内容外,本文不包含任何其他个人或集体已经发表或撰写过的作品成果。
对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律结果由本人承担。
作者签名:日期:年月日前言电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。
电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。
电子邮件系统又称基于计算机的邮件报文系统。
它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。
电子邮件不仅可利用电话网络,而且可利用任何通信网传送。
在利用电话网络时,还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。
由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。
SMTP 是一种提供可靠且有效电子邮件传输的协议。
SMTP 是建模在FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。
POP 协议允许工作站动态访问服务器上的邮件,目前已发展到第三版,称为POP3。
POP3 允许工作站检索邮件服务器上的邮件。
POP3 传输的是数据消息,这些消息可以是指令,也可以是应答。
本实践是在SMTP和POP协议下设计的一个电子邮箱,能够实现发送,接收邮件等功能。
第一章需求分析1.1 发送邮件发送端使用SMTP 发送邮件到邮件服务器发送邮件过程:输入发件人邮箱、用户名、密码,当与邮件服务器建立连接后,编写邮件主题和内容,若需要附件的话,就点击添加附件按钮进行添加附件。
最后点击发送按钮发送邮件1.2 接收邮件接收端使用POP3从邮件服务器上下载邮件,并在接收端上阅读。
接收邮件过程:输入用户名和密码与邮件服务器连接,在文本框中显示出服务器上所接收的邮件,对需要的阅读的邮件点击阅读下载到接收端进行阅读。
在状态栏上显示于邮件服务器的连接状态,以及显示连接过程。
若对于不需要的邮件,可在文本框选中,点击删除按钮删除。
第二章总体设计2.1 总体设计原理电子邮件的工作过程遵循客户-服务器模式。
每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。
发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。
邮局服务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。
一个邮件系统的传输包含用户代理User Agent传输代理TransferAgent 及接受代理DeliveryAgent三大部分。
用户代理是一个用户发信和收信的程序, 负责将电子邮件按照一定的标准包装, 然后送至邮件服务器, 或由邮件服务器收回。
传输代理负责信件的交换和传输。
将信件传送至适当的邮件主机, 再由接受代理将信件分发至不同的邮件信箱。
传输代理必须要能够接受用户邮件程序送来的信件, 解读收信人的地址, 根据SMTP 协议将它正确无误地传递到目的地。
现在一般的传输代理已采用Sendmail程序完成工作。
电子邮件到达邮件主机后, 在经接收代理POP协议被用户读取至自己的主机。
电子邮件在发送与接收过程中都要遵循SMTP、POP3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。
其中,SMTP负责电子邮件的发送,而POP3则用于接收Internet上的电子邮件。
SMTP(Simple Mail Transfer Protocol, SMTP)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP 协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,我们就可以把E-mail寄到收信人的服务器上POP3(Post Office Protocol 3)即邮局协议,目前已发展到第三版,称POP3。
它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
总的来说POP3协议是让用户把服务器上的信收到本地来所需要的一种协议。
本程序为一个基于SMTP和POP3协议的小型EMAIL收发程序,简单的实现了邮件的收发功能。
第三章详细设计与实现3.1设计思路本次设计主要基于POP3协议的基础上实现的,首先详细了解一下POP3协议POP3协议1. POP适用于C/S结构的脱机模型的电子邮件协议,目前已发展到第三版,称POP3。
脱机模型即不能在线操作。
2.当客户机与服务器连接并查询新电子邮件时,被该客户机指定的所有将被下载的邮件都将被程序下载到客户机,下载后,电子邮件客户机就可以删除或修改任意邮件,而无需与电子邮件服务器进一步交互。
3. POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII 码表示。
服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应的操作状态是成功还是失败。
4. 在POP3协议中有三种状态,认可状态,处理状态和更新状态。
当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。
如下图等待连接身份确认quit命令——|认可|—————|处理|——————|更新|重返认可状态5.认可状态的命令语句。
一般情况下,大多数现有的POP3客户与服务器执行采用ASCII 明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器进行身份确认。
一旦确认成功,便转入处理状态。
为了避免发送明文口令的问题,有一种新的认证方法,命令为APOP,使用APOP,口令在传输之前被加密。
当第一次与服务器连接时,POP3服务器向客户机发送一个ASCII码问候,这个问候由一串字符组成对每个客户机是唯一的,与当时的时间有关,然后,客户机把它的纯文本口令附加到从服务器接收到的字符串之后,然后计算出结果字符串的MD5单出函数消息摘要,客户机把用户名与MD5消息摘要作为APOP命令的参数一起发送出去。
目前,大多数windows 上的邮件客户软件不支持APOP命令,qpopper支持。
6.POP3命令码如下:命令参数状态描述假设用C表示客户端(Client),S表示服务器端(Server)。
1) 授权状态客户端首先与POP3服务器建立TCP连接,服务器接收后发送一个单行的确认信息。
此时POP3会话就进入了授权状态。
在授权状态,客户需要向服务器发送用户名和密码进行确认,具体命令如下:1>发送用户名:语法形式:USER <用户名>功能:将客户的用户名发送到服务器。
服务器返回:+OK正确的用户名;-ERR错误的用户名。
示例:C:USER myname@S:+OK welcome on this server.2>用户名确认成功后,需要输入密码:语法形式:PASS <密码>功能:将客户的密码发送给服务器。
服务器返回:+OK正确的用户名;-OK错误的用户名。
2) 操作状态授权成功后, POP3会话将进入操作状态,客户就可以执行POP3命令进行相应的操作。
对于每个命令,服务器都会返回应答信息。
下面是在操作状态中使用的命令:1>STAT命令语法形式:STAT功能:从服务器中获邮件总数和总字节数。
服务器返回:邮件总数和总字节数。
示例:C:STATS:+OK 2 3202>LIST命令语法形式:LIST功能:从服务中获得邮件列表和大小。
服务器返回:列出邮件列表和大小。
示例:C:LISTS:+OK 2 messages (320 octets)S:1 120S:2 2003>RETR命令语法形式:RETR <邮件的序号>功能:从服务器中获得一个邮件。
服务器返回:+OK成功;-ERR错误。
示例:C: RETR 1S:+OK 120 octetsS:<服务器发送信件1内容>S: .注意,这里的“.”是单独发送的。
4>DELE命令语法形式:DELE <邮件的序号>功能:服务器将邮件标记为删除,当执行QUIT命令时才真正删除。
服务器返回:+OK成功;-ERR错误。
示例:C:DELE 1S:+OK 1 Deleted示例:C:PASS *****S:+OK myname logged in at 19:04响应3.2 源代码发送端:private void textBoxUserName_TextChanged(object sender, EventArgs e){ labelUserName.Visible = !Regex.IsMatch(textBoxUserName.Text,@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");}private void textBoxPassword_TextChanged(object sender, EventArgs e){ labelPassword.Visible = !Regex.IsMatch(textBoxPassword.Text, @"^\w{5,20}$"); }private void textBoxReceive_TextChanged(object sender, EventArgs e){ labelReceive.Visible = !Regex.IsMatch(textBoxReceive.Text,@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");}private void textBoxSubject_TextChanged(object sender, EventArgs e){ labelSubject.Visible = !Regex.IsMatch(textBoxSubject.Text, @"^.{1,}$");}private void textBoxBody_TextChanged(object sender, EventArgs e){ labelBody.Visible = !Regex.IsMatch(textBoxBody.Text, @"^.{1,}$");}private void buttonSend_Click(object sender, EventArgs e){ string invalidString = "";if (labelUserName.Visible == true) invalidString += "用户名、";if (labelPassword.Visible == true) invalidString += "口令、";if (labelReceive.Visible == true) invalidString += "收件人、";if (labelSubject.Visible == true) invalidString += "主题、";if (labelBody.Visible == true) invalidString += "邮件内容、";//if (invalidString.Length > 0)//{// MessageBox.Show(invalidString.TrimEnd(' ') + "不合规定");//}else{ MailAddress from = new MailAddress(textBoxUserName.Text);MailAddress to = new MailAddress(textBoxReceive.Text);MailMessage message = new MailMessage(from, to);message.Subject = textBoxSubject.Text;message.SubjectEncoding = System.Text.Encoding.UTF8;message.Body = textBoxBody.Text;message.BodyEncoding = System.Text.Encoding.UTF8;if (listBox1.Items.Count > 0){for (int i = 0; i < listBox1.Items.Count; i++){Attachment attachFile = new Attachment(listBox1.Items[i].ToString());message.Attachments.Add(attachFile);}}try{ SmtpClient client = new SmtpClient("smtp." + from.Host);SendMail(client, from, textBoxPassword.Text, to, message);MessageBox.Show("邮件发送出去");}catch (SmtpException err){ if (err.StatusCode == SmtpStatusCode.GeneralFailure){try{ SmtpClient client = new SmtpClient(from.Host);SendMail(client, from, textBoxPassword.Text, to, message);MessageBox.Show("邮件发送出去");}catch (SmtpException err1){ MessageBox.Show(err1.Message, "出错");}}else{ MessageBox.Show(err.Message, "出错");}}}}private void SendMail( SmtpClient client, MailAddress from, string password, MailAddress to, MailMessage message) {eDefaultCredentials = false;client.Credentials = new NetworkCredential(from.Address, password);client.DeliveryMethod = work;try {client.Send(message);}catch{ throw;}finally{ message.Dispose();}}private void buttonAddAttachment_Click(object sender, EventArgs e) {OpenFileDialog myOpenFileDialog = new OpenFileDialog();myOpenFileDialog.CheckFileExists = true;myOpenFileDialog.ValidateNames = true;myOpenFileDialog.Multiselect = true;myOpenFileDialog.ShowDialog();if (myOpenFileDialog.FileNames.Length > 0){listBox1.Items.AddRange(myOpenFileDialog.FileNames);}}private void button1_Click(object sender, EventArgs e){this.Hide();FormReceiveMail re = new FormReceiveMail();re.Show();}}}接收端:private void connect_Click(object sender, EventArgs e) {//将光标置为等待状态Cursor cr = Cursor.Current;Cursor.Current = Cursors.WaitCursor;//用110端口新建POP3服务器连接Server = new TcpClient(textBoxpop3.Text, 110);listBoxstatus.Items.Clear();try{//初始化NetStrm = Server.GetStream();RdStrm = new StreamReader(Server.GetStream());listBoxstatus.Items.Add(RdStrm.ReadLine());//登录服务器过程Data = "USER " + textBoxuser.Text + CRLF;szData = System.Text.Encoding.UTF8.GetBytes(Data.ToCharArray()); NetStrm.Write(szData, 0, szData.Length);listBoxstatus.Items.Add(RdStrm.ReadLine());Data = "PASS " + textBoxpass.Text + CRLF;szData = System.Text.Encoding.UTF8.GetBytes(Data.ToCharArray()); NetStrm.Write(szData, 0, szData.Length);listBoxstatus.Items.Add(RdStrm.ReadLine());//向服务器发送STAT命令,从而取得邮箱的相关信息:邮件数量和大小Data = "STAT" + CRLF;szData = System.Text.Encoding.UTF8.GetBytes(Data.ToCharArray()); NetStrm.Write(szData, 0, szData.Length);listBoxstatus.Items.Add(RdStrm.ReadLine());//改变按钮的状态connect.Enabled = false;disconnect.Enabled = true;receive.Enabled = true;//将光标置回原来状态Cursor.Current = cr;}catch (InvalidOperationException err){listBoxstatus.Items.Add("Error: " + err.ToString());}}private void disconnect_Click_1(object sender, EventArgs e){//将光标置为等待状态Cursor cr = Cursor.Current;Cursor.Current = Cursors.WaitCursor;//向服务器发送QUIT命令从而结束和POP3服务器的会话Data = "QUIT" + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);listBoxstatus.Items.Add(RdStrm.ReadLine());//断开连接NetStrm.Close();RdStrm.Close();//改变按钮的状态connect.Enabled = true;disconnect.Enabled = false;receive.Enabled = false;//将光标置回原来状态Cursor.Current = cr;}private void receive_Click(object sender, EventArgs e){//将光标置为等待状态Cursor cr = Cursor.Current;Cursor.Current = Cursors.WaitCursor;string szTemp;listBoxcontent.Items.Clear();try{//根据邮件编号从服务器获得相应邮件Data = "RETR " + textBoxmailnum.Text + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);szTemp = RdStrm.ReadLine();if (szTemp[0] != '-'){//不断地读取邮件内容,只到结束标志:英文句号while (szTemp != "."){listBoxcontent.Items.Add(szTemp);szTemp = RdStrm.ReadLine();}//若BackupChBox未选中,则收取邮件后,删除保留在服务器上的邮件/*if(BackupChBox.Checked == false){Data = "DELE" + MailNum.Text + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());}*/}else{listBoxstatus.Items.Add(szTemp);}//将光标置回原来状态Cursor.Current = cr;}catch (InvalidOperationException err){listBoxstatus.Items.Add("Error: " + err.ToString());}}private void button1_Click(object sender, EventArgs e){this.Hide();FormSendMail sm = new FormSendMail();sm.Show();}}}第四章测试发送邮件主界面:发送邮件成功后实例:接收邮件主界面:接收邮件成功后实例:第五章实训设计体会通过这次C#网络编程实训,对本学期的与网络有关的课程进行了一次总结和吸收,使知识更加牢固,对课程有了进一步的理解,也从中找到今后学习和研究的方向。