基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx

上传人:b****0 文档编号:16912444 上传时间:2023-07-19 格式:DOCX 页数:38 大小:290.03KB
下载 相关 举报
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第1页
第1页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第2页
第2页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第3页
第3页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第4页
第4页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第5页
第5页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第6页
第6页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第7页
第7页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第8页
第8页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第9页
第9页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第10页
第10页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第11页
第11页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第12页
第12页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第13页
第13页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第14页
第14页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第15页
第15页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第16页
第16页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第17页
第17页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第18页
第18页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第19页
第19页 / 共38页
基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx

《基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx》由会员分享,可在线阅读,更多相关《基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx(38页珍藏版)》请在冰点文库上搜索。

基于socket协议的smtp邮件发送网关的设计开发本科毕业论文.docx

基于socket协议的smtp邮件发送网关的设计开发本科毕业论文

毕业设计(论文)

 

题目基于SOCKET协议的SMTP

邮件发送网关的设计开发

专业电子信息科学与技术

班级电技081

学生胡爱军

指导教师侯浩录

 

2012年

基于SOCKET协议的SMTP邮件发送网关的设计开发

专业:

电子信息科学与技术

班级:

电技081班

作者:

指导教师:

职称:

讲师

答辩日期:

2012-06-24

 

摘要

本次毕业设计的课题要求是从SMTP协议的套接字底层开始,完成客户端与SMTP服务器的交互过程,最终完成邮件发送。

在本文中,我使用了delphi7.0的编程语言环境,利用seversocket和clientsocket控件完成客户端与虚拟服务器之间的连接和发送消息。

着重分析了系统的功能需求,包括了连接邮箱服务器模块、与服务器完成交互模块、邮件体定义发送模块。

详细论述了利用clientsocket组件完成与邮箱服务器的交互,在交互中通过BASE64加密认证了用户和密码;按照RFC822协议和MIME的扩展定义了邮件体,采用了发件箱、收件箱、主题和时间四个邮件头,并与邮件正文统一的赋给了一个字符串,最后成功的完成了邮件发送,达到了设计的要求。

关键词:

套接字、简单邮件传输协议、交互、BASE64加密、邮件体

Abstract

Thepointsofthetaskinthegraduationdesignareasfollows,startingfromthebottomsocketoftheSMTP,tocompletetheinteractionprocessingoftheclientandtheSMTPserver,andfinallyaccomplishe-mailsending.

Inthisarticle,delphi7.0developmentenvironmentisutilized.Twocomponents,seversocketandclientsocketareusedtocompletetheconnectionandmessagesendingbetweenvirtualserverandclient.Thefunctionalrequirementsofthesystemareanalyzed,includingmailboxserverconnectionmodule,serverinteractionaccomplishmentmodule,andthedefinitionandsendingmoduleofthemessagebody.Themethodofmailboxserverinteractionisexpoundedindetailbytheuseofclientsocket.Atthesametime,BASE64isappliedtoencodeuser-nameandpassword;messagebodyisdefinedbasedontheRFC822andtheextensionofMIME.Foure-mailheaders,outbox,inbox,subjectandtimeareused,togetherwiththeunifiedbodyofthemessageformastring,thensuccessfullycompletede-mailsending.

Keywords:

socket,SMTP,interaction,BASE64,e-mailbody

1绪论

1.1课题研究背景及意义

1.1.1电子邮件的发展历程和课题提出背景

电子邮件的诞生是在1971年秋季(确切的时间已经无法考证),当时已经有一种可传输文件的电脑程序以及一种原始的信息程序。

但两个程序存在极大的使用局限——例如:

使用信息程序的人只能给接收方发送公报,接收方的电脑还必须与发送方一致。

发明电子邮件时,汤姆林森是马萨诸塞州剑桥的博尔特.贝拉尼克.纽曼研究公司(BBN)公司的重要工程师,当时,这家企业受聘于美国军方,参与Arpanet网络(互联网的前身)的建设和维护工作。

汤姆林森对已有的传输文件程序以及信息程序进行研究,研制出一套新程序,它可通过电脑网络发送和接收信息,再也没有了以前的种种限制。

为了让人们都拥有易识别的电子邮箱地址,汤姆林森决定采用@符号,符号前面加用户名,后面加用户邮箱所在的地址。

电子邮件由此诞生。

虽然电子邮件是在70年代发明的,它却是在80年才得以兴起。

70年代受网络速度的限制,那时的用户只能发送些简短的信息;到80年代中期,个人电脑兴起,电子邮件开始在电脑迷以及大学生中广泛传播开来;到90年代中期,互联网浏览器诞生,全球网民人数激增,电子邮件被广为使用。

随着我国和世界的经济的迅速地发展,网络的应用普及到了各种大小型企业甚至个人生活.所以当办公应用的砝码不断被加入互联网,注定了天平会向电子邮箱这端倾斜的不争事实。

而我国目前的邮件发展趋势分为:

趋势一,邮件处理程序的改变

电子邮件给我们工作带来便捷的同时,也会在不经意间打扰我们的工作。

很多朋友或网友会抱怨占用我们的时间、打扰工作和学习的思路等。

但是事实上,如果我们每天定时处理邮件,可能每天两次或者四次,总之依据自己的邮件往来数量制定好适合自己的工作习惯,让邮件处理的程序随你而改变。

趋势二,电子邮箱的灵活和方便

当电子邮箱变的不再新鲜,未来潮流将如何?

从网易免费邮箱的网络硬盘,到公开注册的F的4G文件中转站;从新浪企业推出奇G邮箱,到263推出“无限容量”的263G邮箱后,更加坚定了存储容量在用户市场中的地位。

借着网速的不断提升和未来光纤的普及,这又将会是在线存储的又一个春天。

但万物复苏的春天是短暂的,未来的电子邮箱,绝不会在停留在邮箱存储上,也不再只是一个简单的信息交换、存储应用,而是朝着更灵活、方便的方向发展。

趋势三,桌面办公的普及

邮件桌面客户端是未来发展核心应用之三。

电子邮箱未来的发展,更多的应用扩展和体验,象DreamMail、FoxMail、Outlook等这类的桌面客户端将无疑扮演着最重要的角色。

电子邮箱客户端将使人们脱离频繁登陆Web页面的烦恼。

凭借着飞快的网速,在上传附件方面将与Web页面的速度一样,甚至更快速。

趋势四,移动办公的成熟

客户端结合移动邮箱服务将是未来发展核心应用之四。

移动邮箱在具备常规互联网邮件功能的同时,充分利用手机的功能优势,让用户可以通过手机短信、彩信或手机WAP上网方式,随时随地获取邮件信息、对邮件进行操作,实现真正的移动畅快沟通。

只要手机有信号,不用在乎有没有带宽接入,随时随地都可以查收邮件。

当前往3G时代的路上,移动邮箱的成熟定会成为历史,会有越来越多的用户在享受传统邮箱的互联网邮件功能同时,加入体验移动邮箱的短信、彩信、邮件到达通知等移动特色服务的行列。

趋势五,邮件安全化的日益加强

随着网络的发展,电子邮件的应用也用在了越来越多的地方,据此原因电子邮件服务对安全提出了越来越多的要求!

而传统电子邮件技术是一种安全性较差的信息传输技术,目前,因特网用户所使用的绝大多数电子邮件系统中,基本没有采取任何措施来保证电子邮件在网络中安全传送。

电子邮件的内容以明文的形式在网络中传递,使其面临着被截获、篡改、破坏的危险;甚至导致不法人员利用邮件进行欺骗等不良行为。

电子邮件系统存在的这些问题,制约了它在政府办公、银行、保险、海关、税务、公安系统等一些涉密部门的进一步使用。

另外,全球范围内普遍存在并不断激化的病毒邮件和垃圾邮件问题,也正不断制约着电子邮件市场的发展。

邮件安全、防病毒、反垃圾已经成为邮件服务提供商、广大个人和企业用户,甚至整个社会共同关注和关心的焦点。

有鉴于此,国内外电子邮件系统相关各方都进行了大量的工作,包括在电子邮件系统中引入数字证书,建立各种加密邮件协议和标准,研究邮件防病毒技术和垃圾邮件过滤技术等;同时,不少国家都出台了电子邮件应用相关的法律法规,如电子签名法、反垃圾邮件法等,对其进行约束和规范。

安全电子邮件系统涉及相当宽泛的技术领域,包括CA认证技术、密码技术、Web技术、数据库技术、防病毒技术、反垃圾邮件技术等。

1.1.2课题研究的意义

本课题的提出是处于在全球网络环境日益发展电子邮件发送应用在生活、学习、工作以及各个方面下的背景中。

而在电子邮件的应用中,安全又是一个特别重要的发展趋势也是应用者们所需要的!

本课题是要从SOCKET的套接字底层分析开始,逐渐的根据SMTP(简单邮件传输协议)协议与服务器交互,完成每一步服务器提出的要求,最后完成邮件发送,使得邮件传输是个很安全过程。

本课题的从套接字底层做起,加强了邮件发送的安全性,能够有效地避免邮件在传输中的信息丢失或者被他人盗取、使用、知晓、修改等可能;同时由于在使用indy控件时,太多的服务器将其当做垃圾邮件处理或是限定发邮件的数量,从而使得用户在信息联络上受到损失。

1.2delphi7.0开发环境简介

Delphi是美国Borland公司开发的一种全新的可视化软件开发工具。

它采用了面向对象程序语言和基于组件的开发结构框架相结合的先进技术。

Delphi这种先进的编程理念和强大的可视化编程功能,克服了其他的面向对象语言在与用户交互能力上的不足。

同时,它强大和先进的数据库处理技术和能快速地建立应用程序的独特优势,为程序开发人员在开发应用程序上提供了便利。

这使得原本繁琐复杂而又枯燥的编程工作在Delphi的帮助下变的简单易学而又有趣。

而值得一提的是它的delphi7.0版本,在保持原有版本优点的基础上增加了更新更强的新特性:

扩大了VCL可视化组件库;对编辑器和编译器方面做了更多改进和优化;增加了多种网络应用开发的空间包括indy和Web编程技术;完全支持.NET技术;支持跨平台开发类库CLX。

Delphi作为Borland公司的巅峰之作,它是有着鲜明的特点的:

(1)简化程序执行过程,编译速度快。

Delphi所使用的全特征代码编辑器和高速度的编译器使其直接生成高性能代码,从而加快了编译速度。

(2)可在多个不同的平台上开发应用。

Delphi7可以在各种Windwos环境下使用,同时也可以在Linux平台上开发应用。

(3)具有更好的可重用性、可管理性和可扩展性。

Delphi7.0使用的是ObjectPascal面向对象编程语言并提供了许多程序框架和可重复利用的可视化组件。

另外,Delphi7使用了独特的VCL(VisualComponentLibrary)类库。

VCL即可视组件库,它可扩展性强、操作简单、封装完整。

用户可以根据自己的需要,可以任意导入导出ActiveX控件也可以任意构建、扩充、甚至是删减VCL。

这大大提高了程序开发效率。

同时,开发人员还可以根据自己的意愿来控制Windows开发效果。

(4)具有强大的数据可处理能力。

应用程序通过Delphi7可以使用Borland公司提供的数据处理工具BDE(BorlandDatabaseEngine),这样应用程序就能可以方便的使用BDE连接到的各种格式的数据源。

并能畅通的使用Oracle、Sybase、SQLServer等多种大型数据库。

在老师的推荐下,也因为delphi编程语言的强大的所在,所以我选择了在本次毕业设计中使用delphi7.0语言。

2系统设计目标及需求分析

2.1系统设计的目的及任务

本次毕设课题:

基于SOCKET协议的SMTP邮件发送网关的设计开发。

要求从SMTP的套接字底层交互开始,完成交互的各个步骤,直到最后能够成功的向SMTP服务器发送出邮件。

课题的具体内容:

(1)学习邮件网关的实现思路并研究该模型的实现方案,提出合理的用户需求设计;

(2)学习DELPHI编程工具并掌握数据库的简单使用(3)了解网络通讯的基本原理和数据编码基本概念,完成SOCKET协议字的套接过程,实现邮件数据的标准编码以及邮件客户端向邮件服务器发送邮件信息的要求。

课题主要的重点和难点在于:

SMTP协议要理解透彻,懂得用户与服务器交互的每一个具体过程;delphi7.0语言的使用和其网络组件的特性和使用,能够懂得SOCKET协议的套接字底层的使用方法;最后的关键是邮件体的各种编码和加密,掌握邮件消息的编码方法以及邮件主题、发件人、收件人、发件人名称、收件人名称、邮件主题内容等内容节的具体编码要求和实现方法;编程实现按照用户的基本设定实现邮件消息的完整编码、实现远端邮件服务器的登陆认证,实现与远端邮件服务器的网络通讯;并最终完成邮件发送。

2.2系统的流程图

本次毕设课题是从连接SMTP服务器开始的,终结于邮件发送,下面图2-1是我的系统设计的流程图:

图2-1系统设计流程图

2.3系统的需求分析

本次毕设的课题的基本要求是:

分析目前网络通讯中最常使用的的邮件发送协议SMTP协议,从该协议的套接字底层开始分析,用SOCKET协议完整的实行SMTP协议的解析和执行,完成向远端服务器发送邮件的完整过程。

由于是从套接字底层开始的,所以在系统的操作中,我们需要操作SMTP协议中交互的每一步。

在我的邮件发送系统功能模块中分为三个主要的功能:

连接邮箱服务器模块、与服务器完成交互模块、邮件体定义和发送模块。

图2-2是我的系统功能模块的示意图:

图2-2邮件发送的功能模块

2.3.1连接服务器模块

在这个模块,主要通过控制clientsocket的Active属性是false还是true来连接服务器,并显示连接是否成功或者断开连接是否成功。

2.3.2与邮件服务器交互模块

这块比较多,普通的一般的交互是直接向服务器发出请求,例如常用的:

HELO、EHLO、AUTHLOGIN、DATA、NOOP等。

但是还有两个不是直接的普通交互,就是服务器在验证用户账号和用户密码时,需要先经过base64加密。

而且由于与邮箱服务器的交互每一次只能发送一个包也就是一步一步的交互,所以这个模块的按钮比较多。

2.3.3邮件体定义和发送定义模块

一个完整的邮件包括邮件头和正文两个部分。

而邮件头又包含着不同的头段,在我的设计里运用了主题、发件箱、收件箱和发件时间这四个头段组成一个完整的邮件头。

其中除了时间是利用delphi中的date或now函数直接提取本地主机时间之外其余都需要由可视化常用组件手动输入。

所以在这个模块里,邮件体的内容设置是几乎完全可以看见的。

而这些输入的内容也完整地组成了一个标准的邮件体。

关于邮件体的定义和发送将在后面的4.2章节中详细介绍。

3SOCKET

3.1套接字的使用

SOCKET是建立在传输协议上的一个套接字规范,它定义了两台计算机间进行通信的规范。

SOCKET实质上提供了进程通信的端点。

进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的,套接字也就相当于是两台机器间通信“通道”的两端。

在使用套接字进行网络通信之前,必须设置套接字的属性,套接字内部数据结构必须包含正确的地址。

套接字数据结构必须包含本地主机和远程主机正确的协议端口和IP地址。

Delphi7.0提供你写网络服务器或客户应用程序去读和写其他的系统。

一个服务或客户程序通常专注于一个单一的服务如超文本传送协议(HTTP)或文件传输协议(FTP)。

使用seversocket,一个应用程序可以提供这些服务中的一个去连接一个希望使用服务的客户程序。

而clientsocket允许一个应用使用这些服务中的一个去连接提供这个服务的服务应用。

Socket连接可以分成三个基本的类型,它们反映了如何开始连接和本地Socket连接是什么。

这三个类型是:

1.客户端连接

客户端连接是一个客户端SOCKET与一个远程系统上的服务端SOCKET连接。

客户端连接由客户端SOCKET开始。

首先,客户端SOCKET必须描述它想连接到的服务端SOCKET.接着客户端SOCKET查找服务端SOCKET,当找到服务器时,就请求连接。

服务器SOCKET维持一个客户端请求队列,在他们有时间时完成连接。

当服务端SOCKET接受客户端连接,服务端SOCKET将向它想连接的客户SOCKET发送一个完整的描述,客户端的连接完成。

2.倾听连接

服务器SOCKET不会去定位客户端,而是他们形成被动的"半连接"状态,倾听来自客户端的请求。

服务器SOCKET形成一个队列,存放它们听到的连接请求。

当服务器SOCKET同意客户连接请求时,它形成一个新的SOCKET去连接客户端,因此这个倾听连接能保持开放状态允许其他客户端请求。

3.服务端连接

当倾听SOCKET同意一个客户端请求时,服务器端SOCKET形成一个服务器连接。

当服务器端同意连接时,向客户端发送一个服务端socket描述以完成连接,当客户端socket收到这个描述时这个连接得到确认,连接完成。

一但连接到客户端的Socket完成,服务端连接就不能识别从别的客户端发来的连接。

一个完整的SOCKET连接描述,你必须提供SOCKET在连接两端的地址,并且在连接前,你必须完整的描述你想得到的连接。

客户端SOCKET必须描述他们想连接的服务器。

服务端SOCKET必须描述他们提供反应的服务器的端口。

一个SOCKET连接终端的完整描述包括两部分:

1.IP地址

主机是这样一个系统,它运行着包含有SOCKET的应用程序。

你必须给SOCKET描述主机,通过给出主机的IP地址来完成这个描述。

2.端口号

虽然IP地址提供了足够的信息去找到SOCKET连接中位于另一端的系统,但通常还需要指定那个系统的端口号。

没有端口号,一个系统在同一时间只能进行一个单一的连接。

端口号是唯一标识那个允许一个独立系统连接到同时支持多个连接的主机,每个连接都必须指定一个端口号。

在delphi中开发SOCKET网络程序,可以使用clientsocket和seversocket组件,或者使用Indy控件组中的TIDTCPClient和TIDTCPSever组件(本次毕业设计中采用了前者)。

不过在delphi7.0这个版本中,这对组件不是默认安装的,需要手动安装,会安装在internet组件页中。

(socket控件使用windowssocket对象去封装windowssocketAPI调用,所以应用时不用去关心连接建立的细节或管理socket信息)。

3.2clientsocket和seversocket控件

Clientsocket是客户端组件,而seversocket是服务端的组件。

通信中由clientsocket主动请求服务器端建立连接,而seversocket是通信里的响应方,其动作是监听以及被动接受客户端的连接请求,并对请求进行回复。

而它同时可以接受一个或多个clientsocket组件的连接请求,并于每个clientsocket进行单独连接和通信。

在属性上,只要保持服务端port和客户端的host一样既可以正常工作。

由于我做的是客户端,所以下面详细的论述客户端clientsocket的属性:

●Active:

标识套接字底层连接是否打开并且处于激活状态;

●Address:

指定服务器系统的IP绝对地址;

●Host:

指定服务器系统的主机名(如果同时设置了Host属性和Address属性,则系统优先使用Host属性);

●Port:

指定服务器系统的端口号;

●ClientType:

指定客户读写信息类型,应该与服务器的设置相同,ctNonBlocking表示异步读写信息,ctBlocking表示同步读写信息;

●Close:

关闭套接字连接;

●Open:

打开套接字连接;

●ReceiveBuf:

从套接字连接中读取指定的节数并保存在缓冲区buf中;

●ReceiveText:

从套接字连接中读取一个字符串,其函数原型:

FunctionReceiveText:

string;

●Sendtext:

向套接字连接发送一个字符串;

●ReceiveLength:

返回将要发送的字节数,其函数原型为:

FunctionReceiveLength:

Integer。

而在测试服务端连接是否正常是,可以自己建一个服务端,使得两者之间相互通信,在使用过程中注意:

1.client和server都有port属性,需要一致才能互相通信;client有Address属性,使用时填写对方(server)的IP地址;

2.client:

OnRead事件,当client受到冲击消息时在OnRead事件中可以获得server发送过来消息。

Server:

OnClientRead事件,与上述client的作用相同;

3.clien使用SocketClient1.Socket.SendBuf(char类型的数组,信息长度);server使用SocketServer1.Socket.Connection[0].SendBuf(char类型的数组,信息长度);

4.clien使用SocketClient1.Socket.ReceiveBuf(char类型的数组,信息长度);server使用SocketServer1.Socket.Connection[0].ReceiveBuf(char类型的数组,信息长度)。

3.3利用SOCKET完成消息传送

SOCKET是两台计算机通信的终节点,使用网络协议进行通信。

SOCKET与其他I/O设备类似,对它的操作也包括打开、读取/写入及关闭等。

SOCKET通信在windows中是以队列的形式有操作系统进行处理的,而且接收方和发送方是相互协同工作的,否则会造成数据丢失,SOCKET编程采用的是网络通信方式,同时遵循数据分包传送的基本规则,也就是说,在SOCKET编程中,每次只发送和接收一个包,以确保数据传输的安全性和稳定性。

在整个邮件发送中,利用SOCKET通讯完成连接和消息发送应该说是我毕设的一个前置一个前提。

这样的连接和消息发送再后来的设计中会被压缩,因为和服务器是按照SMTP协议进行交互的。

但是从整个过程来看是很重要的,完全有必要做一次连接和消息发送。

图3-1是我在连接虚拟服务器和发送信息时的工程截图:

图3-1工程截图

主要还是seversocket和clientsocket两个组件,在这两个控件的port属性,需要一致才能互相通信;client有Address属性,使用时填写对方(server)的IP地址。

这个是这个过程中所需要注意的。

下面是程序中实现消息发送的一段:

procedureTForm1.Memo1KeyDown(Sender:

TObject;varKey:

Word;Shift:

TShiftState);

begin

ifkey=vk_returnthen

ifFServerFlagthen

sskServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.count-1])

else

cskClientSocket1.Socket.SendText(Memo1.Lines[Memo1.Lines.count-1]);

end;

在程序运行后,按下回车

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2