网络课设.docx
- 文档编号:2387231
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:28
- 大小:308.14KB
网络课设.docx
《网络课设.docx》由会员分享,可在线阅读,更多相关《网络课设.docx(28页珍藏版)》请在冰点文库上搜索。
网络课设
网络课程设计实验报告
利用Socket编程实现邮件发送服务器
学号:
4090511
姓名:
唐盼
日期:
2012-06-29
成绩:
东北大学秦皇岛分校
一,实验目的
实现简单的邮件服务器,利用Socket编程实现邮件服务器.通过任选一门自己熟悉的程序设计语言,根据SMTP实现一个简单的邮件服务器.熟悉Socket套接字的在具体程序语言中的使用和SMTP协议的运用和实现.掌握SMTP协议的基本原理和Socket的使用.
二,实验步骤
首先我个人对PHP语言比较熟悉,所以选择PHP程序语言实现此次课程设计.然后利用以前做过的一些小练习,在以前网络课的学习基础上,通过查阅网上的资料.基本确定STMP协议发送邮件服务器的实现过程.(在电脑里安装服务器,以及搭建php环境这里就不再累述.因为网络编程,主要叙述SMTP协议和Socket套接字的运用.)
1.搭建php+apache服务器环境.搭建一个php环境.
2.登录界面.对用户的对用户合法性进行判断.只有匹配成功,才能登录邮件服务器进行发送邮件.否则不能登录.
3.实现Socket的编程,利用SMTP协议,进行邮件发送.从而实现邮件发送服务器.
SMTP协议:
简单邮件传输协议.即是邮件发送时使用的协议.
邮件发送实物原理图.
由上图可以看出,邮件发送,并不是直接发给对方的邮箱.而是通过自己的邮件端的服务器,然后再转发到对方邮箱所在的服务器.之间的发送就是遵守的SMTP协议.我们从客户代理将邮件发送到发送放邮件服务器时,使用的是SMTP协议,发送方邮件服务器讲邮件发送到接收方邮件服务器时,使用的也是SMTP协议。
当接收方代理从接收方邮件服务器获得邮件时,使用的是POP3协议,总之,发送使用SMTP协议,接收使用POP3协议。
而我们这里要做的是利用socket发送邮件,实质上就是自己编写代码取代发送方邮件代理的功能,自己将邮件发送到发送方邮件服务器中.我们在编写的代码就是如何实现SMTP。
因此我们只是关心如何发送邮件,而不需要关心接收方如何获得邮件.
首先在php中,使用fsockopen函数打开一个网络连接,函数语法格式:
intfsockopen(stringhostname,intport,int[errno],string[errstr],int[timeout]);这里由于要使用SMTP协议,所以端口号为25。
在打开连接成功后,会返回一个socket句柄,使用它就可以象使用文件句柄一样的。
可使用的操作有fputs(),fgets(),feof(),fclose()
SMTP分为命令头和信息体两部分。
命令头主要完成客户端和服务器的连接,验证等。
整个过程由多条命令组成。
每个命令发送到服务器后,由服务器给出相应信息,一般为3位数字的响应码和响应文本。
不同的服务器返回的响应码是遵守协议的,但是响应正文本则不必。
每个命令及响应的最后都有一个回车符,这样使用fputs和fgets就可以进行响应的处理.SMTP的命令及响应信息都是单行的。
信息体则是邮件的正文部分,最后的结束行应以单独的"."作为结束行.
客户端一些常用的SMTP指令为:
HELOhostname:
与服务器打招呼并告知客户端使用的机器名字,可以随便填写
MAILFROM:
sender_id:
告诉服务器发信人的地址
RCPTTO:
receiver_id:
告诉服务器收信人的地址
DATA:
下面开始传输信件内容,且最后要以只含有.的特殊行结束
RESET:
取消刚才的指令,从新开始
VERIFYuserid:
校验帐号是否存在(此指令为可选指令,服务器可能不支持)
QUIT:
退出连接,结束
客户端每发一条命令,服务器便会返回相应的相应信息,信息格式为(响应码+空格+解释)一些常见的相应码为:
220服务就绪(在socket连接成功时,会返回此信息)
221正在处理
250请求邮件动作正确,完成(HELO,MAILFROM,RCPTTO,QUIT指令执行成功会返回此信息)
354开始发送数据,结束以.(DATA指令执行成功会返回此信息,客户端应发送信息)
500语法错误,命令不能识别
550命令不能执行,邮箱无效
552中断处理:
用户超出文件空间
三,实验过程和代码
一简单的登录界面,用html语言解决.
15px"> --占位表格--> --利用表格布局共8行2列-->