[精选]VisualC网络编程案例实战之邮件接收和发送客户端9127.pptx
《[精选]VisualC网络编程案例实战之邮件接收和发送客户端9127.pptx》由会员分享,可在线阅读,更多相关《[精选]VisualC网络编程案例实战之邮件接收和发送客户端9127.pptx(112页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第章 邮件接收和发送客户端邮件接收和发送客户端的作用是在本地计算机和远程计算机之间传送电子信件以及接收电子信件。用户平时所用的就是一种邮件接收和发送客户端。通常情况下,由发送者将电子信件发送到邮件服务器()中,再由服务器将该邮件发送到(接收邮件)服务器中,邮件接收者通过账户和口令再从服务器中获取信件。在本章中,将向用户介绍邮件接收和发送客户端的原理以及开发过程。调用自带的邮件发送程序一般情况下,用户所使用的操作系统中都带有默认的邮件发送程序。通过该邮件发送程序,用户可以将邮件发送到任何目的地址。这种方法比较简单适用,所以很受大部分用户欢迎。用户可以在操作系统中,使用操作系统命令打开邮件程序。如
2、果用户需要在自己的程序中调用系统自带的邮件程序,那么需要使用函数()或者()进行调用。下面将分别介绍这两种方法。调用自带程序在操作系统中,所有的程序都是以进程为单位运行。本节中所讲述的调用邮件发送程序就是通过调用相应的进程实现的。调用该进程所使用的命令是“”,其中,表示邮件发送的目的地址。例如,用户需要将邮件发送到邮件地址为的邮箱中,使用的命令是“”。首先,在系统界面下选择“开始”“运行”命令,弹出“运行”对话框,如图所示。图“运行”对话框然后,在运行对话框中输入命令“”,可以打开自带的邮件发送程序进行邮件发送,如图所示。图 邮件收发器以上过程是用户通过命令调用邮件收发器必须做的。实际上,除了
3、这种方法,用户还可以在程序中通过函数调用邮件收发器。此种方法将在节中进行讲解。()函数在中编程,类库已经提供了几个库函数用于调用的外部程序,包括邮件收发程序。在本节中,将向用户介绍其中的两个函数()和()。使用()函数()函数可以创建进程,同时也可以调用已经存在的进程。该函数的原型如下:(,);该函数创建进程成功则返回,否则返回。其参数意义如下:参数表示可执行文件的名字。用户指定该参数后,该函数会在当前路径下搜索可执行文件,但不会按照系统的搜索路径进行搜索。注意:使用该参数时,需要加上扩展名,因为系统不会自动为其添加“”后缀名。参数表示将要传递到新进程的命令行字符串。使用该参数时,该函数会自动
4、为其添加后缀名“”。如果参数字符串没有指定所在路径,那么该函数则会按照系统的搜索路径进行搜索文件。参数表示该进程创建的子进程是否能继承父进程的对象句柄。参数指向结构体的指针变量。该结构体的声明如下:;表示该结构体的大小 ;保留,必须将该参数初始化为 ;设置控制台程序的名称 ;设置应用程序窗口的坐标 ;设置应用程序窗口的坐标 ;设置应用程序窗口的横向大小 ;设置应用程序窗口的纵向大小 ;以字符为单位设置应用程序窗口的坐标 ;以字符为单位设置应用程序窗口的坐标 ;设置应用程序窗口所使用的背景色等 ;表示创建窗口的标志 ;是否显示应用程序窗口 ;保留,将该参数必须设置为 ;保留,将该参数必须设置为
5、;设置控制台程序的输入输出缓存句柄 ;错误输出句柄,*;该结构体主要用于保存新创建进程的窗口信息,如窗口的大小或窗口的显示方式等。其中,参数标识了窗口创建成功以后,在显示之前以何种方式进行显示。其取值如表所示。表 程序窗口显示标志取值注意:在表中所示的程序窗口显示标注意:在表中所示的程序窗口显示标志的作用仅仅是为了控制相应的成员变志的作用仅仅是为了控制相应的成员变量是否有效而已。例如,用户在程序中,量是否有效而已。例如,用户在程序中,需要使用到该结构体中的成员。那么,需要使用到该结构体中的成员。那么,用户必须将参数取值为。否则,该成员用户必须将参数取值为。否则,该成员变量将无效。变量将无效。参
6、数是指向结构体的指针变量。该结构参数是指向结构体的指针变量。该结构体声明如下:体声明如下:;进程句柄进程句柄 ;线程线程句柄句柄 ;进程进程 ;线程线程;取 值含 义使用和成员使用成员使用和成员使用和成员使用成员使用、成员以全屏方式启动程序该结构体主要用于保存进程的相关信息。其他参数均可以默认设置为。例如,调用操作系统的记事本程序。代码如下:.省略部分代码();定义结构体变量;定义结构体对象*”;记事本名称();调用函数打开记事本程序.省略部分代码同样的道理,用户在本例中,也可以使用函数()调用邮件收发程序。代码如下:.省略部分代码();定义结构体变量;*;打开邮件程序的系统命令();调用函数
7、打开记事本程序.省略部分代码使用()函数在编程中,除了函数()以外,还可以调用函数()实现相同的功能。该函数原型如下:(,父窗口句柄 ,将要进行的操作形式 ,目录文件名称或文件路径 ,传递的参数 ,一般为 显示方式);该函数执行成功会返回调用程序的应用程序指针,否则返回错误代码。部分错误代码如表所示。表 部分错误代码错 误 代 码意 义找不到相应文件找不到所需路径无效的文件无效的文件名 操作系统的内存溢出该函数各个参数的说明已在函数原型中标出。使用该函数调用操作系统自带的邮件发送程序,代码如下:以上代码是使用语言编写,并且使用命令行窗口界面,目的是为了让用户了解整个调用过程。在随书光盘的第章中
8、附有代码,请用户自行参考。此段代码在中编译后的结果,如图所示。用户在运行界面中输入字符或,然后按下键。程序提示邮件程序正在打开,当邮件程序打开以后,实例程序会提示已经打开邮件程序,如图所示。图 运行界面图 运行界面注意:在程序中为了模拟计算机的工注意:在程序中为了模拟计算机的工作,所以笔者使用了循环产生时间差,作,所以笔者使用了循环产生时间差,仅仅是为了让用户重复了解该调用过程。仅仅是为了让用户重复了解该调用过程。在实际编程中,不提倡使用该方法产生在实际编程中,不提倡使用该方法产生时间差,因为这种方法很危险,容易造时间差,因为这种方法很危险,容易造成系统的崩溃。通常,使用多线程编程成系统的崩溃
9、。通常,使用多线程编程的方法比较安全,也是笔者极力推荐的的方法比较安全,也是笔者极力推荐的一种方法。该类方法将在后面的相关章一种方法。该类方法将在后面的相关章节中讲述。节中讲述。会话过程 怎么连接服务器在网络中传输邮件信息都是基于协议的,所以用户在操作系统中编写邮件发送程序时可以使用套接字来完成。一般情况下,客户端连接服务器的几个步骤如下。()客户端指定地址和端口连接服务器。()服务器收到连接请求,并同意客户端连接请求。()客户端和服务器互相发送数据。()关闭服务器和客户端的套接字。基于以上几个步骤,用户可以中编写程序实现邮件客户端。创建套接字对象该实例与一般网络程序一样,需要套接字的支持,所
10、以用户应该首先初始化套接字库。代码如下:();();指定套接字库版本();初始化套接字库用户初始化套接字库以后,还必须记得在程序退出之前释放该套接字库。代码如下:()();释放已经加载的套接字库然后,用户可以调用函数()创建连接服务器的套接字了。代码如下:在代码中,函数()创建了基于通信的流式套接字句柄。连接服务器用户创建好套接字以后,可以调用函数()连接服务器。其原型如下:(,*,);该函数用于连接远程计算机,如果连接失败则返回,否则成功。参数及其意义如下:参数表示将要连接服务器的套接字句柄,该套接字是用户之前已经创建好的套接字句柄。参数是指向套接字地址结构体的指针变量。该套接字结构体声明如
11、下:;该结构体是结构的扩充结构,一般被用在 中。参数表示套接字结构对象的大小。使用该函数在套接字上连接服务器。例如,服务器地址为“”,端口为。代码如下:通过上面的代码,用户已经向服务器发送了连接请求。当服务器接受客户端的连接请求以后,服务器会返回相关响应码给客户端。该响应码的前位数字表示服务器端响应的结果。部分响应码如表所示。表 部分响应码响 应 码意 义服务器就绪服务器关闭传输通道客户端所请求的邮件操作完成邮件地址不可用服务器服务不可用,关闭传输通道由于处理过程中出错,请求的操作被终止服务器存储空间不足命令语法错误命令参数的语法错误命令暂时不可实现错误的命令序列客户端请求的操作不能被执行或者
12、邮件地址不可用服务器的存储不足邮箱名称不合法服务失败发送验证用户名验证账号密码失败在该实例中,客户端如果连接服务器成功则会返回响应码,表示服务器服务就绪,否则返回。客户端接收响应码应该调用函数()。代码如下:本节中,向用户讲述了连接服务器、响应码的具体意义以及客户端接收响应码,并且配有相关的代码实例。命令在客户端与服务器之间进行数据传输时,双方都是使用命令进行交流。因此,命令在通信中起着很重要的作用。但是,在向用户讲解命令之前,用户必须首先了解一下电子邮件的基本格式。构造格式在例子中,的基本格式包括邮件头和邮件体。邮件头中的内容是关于该邮件的一些基本信息。例如,发送者和主题信息。而邮件体中是纯
13、文本的邮件内容,并且在协议中,还规定在邮件头和邮件体之间需要使用一个空白行隔开。在邮件头中,主要是由标准字段组成,这些字段包含邮件的基本信息。例如:邮件头:以上字段所包含的信息:邮件发送者的邮件地址是,邮件主题是 。在协议中,包含了很多邮件头标准字段,部分邮件头字段如表所示。紧跟着邮件头的是一个空白行,用于区分邮件头和邮件体。在邮件体中,主要是邮件需要发送的信息内容。在邮件体中,不包含任何字段信息,只有文本格式的邮件内容而已。表 邮件头字段字 段意 义邮件创建者的邮件地址邮件目的地邮件发送者邮件回复地址邮件抄送人 邮件正被回复邮件创建的时间邮件主题邮件的其他说明邮件的关键字邮件的密件抄送人邮件
14、地址邮件的标识符在表中列出了部分标准字段。其中,表示邮件的创建者地址,该地址在一般情况下仅有一个。表示邮件的发送者,该发送者可能是转发邮件,该字段可以有多个邮件地址,地址之间使用逗号隔开。同时可以有多个地址的字段是。例如::,发送者为多个地址 接收者也为多个:邮件主题空行!邮件数据体 !如果邮件没有发送成功,则客户端应该将该邮件重新进行发送。邮件的重发必须在保证邮件内容不发生改变的情况下进行。实际上,邮件进行重发只用在原有邮件头的标题字段前加上字符串“”。例如,将上述实例中的邮件进行重发,内容如下::,发送者为多个地址 接收者也为多个:邮件主题!邮件数据体 !注意:在连接服务器成功以后,客户端
15、在接收到服务器返回的命令后,就可以将以上构造的邮件内容发送到服务器了。命令前面已经向用户介绍过客户端与服务器之间的交流是通过命令来完成的。常见的命令如表所示。表 常用命令命 令含 义客户机向服务器问候指定邮件的发送者指定邮件的接收者指示客户端或服务器端可以发送邮件内容重新初始化会话状态验证邮件地址的有效性空操作终止会话交换服务器与客户端下面将参照表中所列举的部分命令进行讲解。命令是在邮件客户端连接服务器成功以后,第一个发送到服务器的命令。其作用是向服务器问候。例如,客户端向服务器问候并表明自己的身份。内容如下:其中,字符表示结束符号。以上内容表示客户端向服务器问候并且表明自己的身份。例如,在中
16、向服务器发送该命令,代码如下:.省略部分代码 ;构造命令字符串(,();发送命令到服务器.省略部分代码命令 分别表示指定邮件的发送和接收者。例如:上述代码分别指定了邮件的发送者和接收者的邮件地址。命令是客户端发送到服务器表明客户端将要发送邮件到服务器。服务器收到该命令后会返回响应码到客户端,表示服务器已经准备好接收客户端的邮件数据。命令是被用来验证某个邮件地址的有效性。例如,用户用该命令来验证自己的邮箱地址是否有效,则可以发送命令字符串“”到服务器。如果该邮箱地址是有效的地址,则服务器会返回响应码,表示客户端所请求的操作成功,否则返回,表示邮件地址无效。命令表示终止服务器和客户端的会话。例如客
17、户端向服务器发送该命令,代码如下:.省略部分代码;构造命令字符串(,();发送命令到服务器.省略部分代码当服务器接收到该命令以后,会返回响应码到客户端,表示服务器已经关闭相关的数据通道。注意:表中的命令在程序中被发送时必须加上换行符号“”,或者用户在构造完成整个邮件内容后,需要在邮件内容后面加上“”,表示数据内容发送或者接收完毕。发送命令与接收响应在客户端编程中,通常情况下客户端都是通过向服务器发送命令表示需要进行的操作。在表中,已经列出了部分常用命令,这些命令都是在客户端连接服务器成功以后发送的。客户端发送命令以后,服务器通过向客户端发送响应码告知其所发送的命令是否成功或被执行。与服务器一问
18、一答客户端与服务器的通信过程是通过问答形式完成的,这个过程是典型的通信模式。下面介绍一下邮件客户端发送的命令与服务器端返回的信息。内容如下:.省略发送连接请求 ()加密后的用户名 加密后的密码 准备发送信件 .信件以.结束.省略构造信件内容并发送退出命令 以上内容单数为客户端发送的命令,双数为从服务器端返回的信息。通过上面的内容,用户可以看到这是发送邮件所要经历的一个典型的(客户端服务器)通信过程,通过问答的形式将一封邮件发送到服务器。注意:在客户端发送命令以后,服务器会返回是否准备好接收客户端将要发送邮件的响应码,该响应码是,表示服务器已经准备好接收邮件。接下来,客户端可以直接将邮件发送到服
19、务器。发送命令在实例中,客户端发送命令是通过函数()进行的。该函数的作用是向套接字的另一方发送指定缓冲区中的内容。函数原型如下:(*);该函数调用成功返回非值,否则失败。部分参数意义如下:参数表示客户端所创建的套接字句柄。参数指向缓冲区的字符指针。参数表示缓冲区的大小,可以使用函数()获得。例如,用户使用函数()将命令发送到服务器,代码如下:;定义命令字符串()();接收邮件服务器响应客户端接收的消息来自于服务器端返回的响应码。实现该功能的函数是(),该函数原型如下:(*);该函数调用成功,则返回实际接收到的字符数,否则失败。主要参数意义如下:参数套接字句柄。参数表示接收数据的缓冲区指针,与函
20、数()一样。参数表示将接收的数据大小。在这里将该参数设置为。;();在这里,关于客户端接收服务器响应消息的功能不再进行重复讲述,请用户复习本章前面所讲述的相关内容。客户端发送邮件用户通过学习前面关于邮件收发的基本原理和编程方法,对邮件收发器的制作已经熟悉。在本节中,将通过编程制作程序实例,向用户讲述在环境下编程的具体方法。通过本节实例的学习,用户可以仿照该实例的设计方法,自行编程实现邮件收发器。准备工作在程序中,窗口界面是最重要的,因为程序界面直接面向用户。当用户第一次使用软件时,其窗口界面决定了用户对该软件的第一印象,所以我们先从设计对话框的界面开始,然后做些编程前的准备工作。创建工程创建基
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精选 VisualC 网络 编程 案例 实战 邮件 接收 发送 客户端 9127
限制150内