资源描述
长沙航空职业技术学院毕业设计 目目 录录 1 1 绪论绪论3 1.1 电子邮件介绍3 1.1.1 介绍3 1.2 开发背景4 1.3 课题研究方法4 1.4 开发环境及运行环境4 1.4.1 开发环境.4 1.4.2 运行环境.4 2 2 邮件收发系统设计邮件收发系统设计5 2.1 软件架构及系统用例图5 2.1.1 系统架构.5 2.1.2 系统总体用例.6 2.1.3 程序功能框图.6 3 3 电子邮件的标准格式电子邮件的标准格式 (RFC(RFC 822)822).7 3.1 RFC 822 简介.7 3.2 信件的头部7 3.2.1 信头的一般格式.7 3.2.2 结构化字段和非结构化字段.8 3.2.3 信头字段的元素.8 3.2.4 标准的信头字段9 3.3 SMTP 协议简介及工作原理.12 3.3.1 介绍.12 3.3.2 SMTP 模型12 3.4 SMTP 协议的命令和应答.13 3.4.1 SMTP 协议的命令13 3.4.2 SMTP 的应答码14 4 4 重要模块设计重要模块设计.16 4.1 用户登录模块16 4.2 用户邮箱主页16 4.3 收件箱16 4.4 发件箱17 4.5 删除邮件17 4.6 通讯录17 4.7 草稿箱17 4.8 新建联系人18 4.9 写信18 ASP.NET 邮件收发系统 4.10 邮件转发18 5 5 主要功能介绍主要功能介绍.19 5.1 用户登录模块19 5.2 框架的搭建20 5.2.1 主要架构:20 5.2.2 友情链接图片 Log 及链接:20 5.3 收件箱21 5.4 邮件发送23 5.4.1 发送邮件的主要代码:23 5.4.2 发送附件代码:24 5.5 删除邮件27 5.5.1 获取要删除的信息字段 ID:.27 5.5.2 删除数据库中的数据:28 5.6 通讯录28 5.6.1 绑定通讯录:.28 5.6.2 删除联系人:29 5.7 草稿箱29 5.7.1 草稿箱的数据绑定:29 5.7.2 草稿箱数据的删除:30 5.8 联系人30 5.9 邮件转发30 6 6 数据库设计数据库设计31 6.1 登录系统31 6.2 收件箱32 6.3 发件箱32 6.4 联系人33 7 7 结论结论.33 8 8 参考文献参考文献33 9 9 致谢致谢.34 长沙航空职业技术学院毕业设计 1 绪论 1.1 电子邮件介绍 1.1.1 介绍 电子邮件(简称 E-mai1)又称电子信箱、电子邮政,它是种用电子手段提供信息 交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信, 加速了信息的交流及数据传送,它是个简易、快速的方法。通过连接全世界的 Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到 目前为止,可以说电子邮件是 Internet 资源使用最多的一种服务,E-mai1 不只局限于 信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。 电子邮件不是一种“终端到终端”的服务,是被称为“存贮转发式”服务。这正是 电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。即信件发 送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件 立刻送到对方的信箱内,且存储在对方的电子邮箱中。接收者可在他认为方便的时候读 取信件,不受时空限制。在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而 “接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的 个实体。因为电子邮件是通过邮件服务器(mai1 server)来传递档的。通常 mail server 是执行多任务操作系统 UNIX 的计算机,它提供 24 小时的电子邮件服务,用户只 要向 mail server 管理人员申请个信箱账号,就可使用这项快速的邮件服务。 电子邮件的工作原理: 1) 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输协议(Simple Mail Transfer Protocol, 简称 SMTP)这一系统软件来完成的,它是 Internet 下的一种电子邮件通信协议。 2) 电子邮件的基本原理,是在通信网上设立“电子信箱系统” ,它实际上是一个计 算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在 硬盘上为用户分一定的存储空间作为用户的“信箱” ,每位用户都有属于自己的个电 子信箱。并确定个用户名和用户可以自己随意修改的口令。存储空间包含存放所收 ASP.NET 邮件收发系统 信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、 读信、编辑、转发、存档等各种操作。系统功能主要由软件实现。 3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键 入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信箱之间进行传递和交换, 也可以与另个邮件系统进行传递和交换。收方在取信时,使用特定账号从信箱提取。 1.2 开发背景 当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂, 但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来 说,更加显得太过于华丽而不太实用。有鉴于此,在了解 RFC 底层协议的基础上,我 们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。 1.3 课题研究方法 邮件收发是多个客户之间交流的工具,起到通信功能 。我的毕业设计所做的虚拟 机采用标准 语言编写,在结构上模仿了 126 邮箱与新浪邮箱的设计。 1.4 开发环境及运行环境 1.4.1 开发环境 AMD Athlon(TM),512M 内存,80G 硬盘 Microsoft Windows XP Professional Microsoft Visual Studio 2008(C Sharp) Microsoft Developer Network for Visual Studio.NET 2008 Microsoft SQL Server 2005 1.4.2 运行环境 Intel Pentium 2 及以上处理器,32M 以上内存,4G 以上硬盘 长沙航空职业技术学院毕业设计 Microsoft Windows 9X/NT 操作系统 800*600 或以上的屏幕分辨率 确保机器上安装有.Net Framework 1.0 或者以上版本 (以后略) 2 邮件收发系统设计 2.1 软件架构及系统用例图 2.1.1 系统架构 软件的总体架构如图 2.1: 图 2.1 软件架构图 主界面 主要功能选 择 用户 发送邮件 类 接收邮件 类 ASP.NET 邮件收发系统 2.1.2 系统总体用例 存入草稿 删除邮件 接收邮件 登录账号 注册账号 发送邮件 纯文本邮件 带附件邮件 图 2.2 系统总体用例图 2.1.3 程序功能框图 长沙航空职业技术学院毕业设计 客户端软件 邮件接收系统 邮件接收系统 删除邮件 简单邮件接收 带有附件的邮件接收 简单邮件发送 带有附件的邮件发送 联系人管理 彻底删除 存入草稿箱 添加联系人 删除联系人 修改联系人 图 2.3 程序功能图 3 电子邮件的标准格式 (RFC 822) 3.1 RFC 822 简介 RFC822 规定的电子邮件内容全部由 ASCII 字符组成,就是通常所说的文本文件, 因而标准将它称为 Internet 文本信件(Internet Text Messages)。 从直观上看,信件非常简单,就是一系列由 ASCII 字符组成的文本行,每一行以 回车换行符(“CRLF“,就是 ASCII 码的 13 和 10)结束。 从组织上看,信件内容结构分为两大部分,中间用一个空白行(只有 CRLF 符的行) 来分隔。第一部分称为信件的头部(the header of the message),包括有关发送方、 接收方、发送日期等信息。第二部分称为信件的体部(Body of the message),包括信 件内容的正文文本。信头是必需的,信体是可选的,即信体可有可无。如果不存在信 ASP.NET 邮件收发系统 体,用作分隔的空白行也就不需要。在信体中,也可以有用作分隔的空白行。这样设 计的信件便于进行语法分析,提取信件的基本信息。 在 RFC822 中规定,信件体就是一系列的向收信人表达信息的文本行,比较简单,可以 包含任意文本,并没有附加的结构。信件头则具有比较复杂的结构。 3.2 信件的头部 3.2.1 信头的一般格式 信头的结构比较复杂,信头由若干信头字段(header field)组成,这些字段为用 户和程序提供了关于信件的信息。要了解信头的结构就要弄清楚各种信头字段。 所有的信头字段都具有相同的语法结构,从逻辑上说,包括四部分,字段名 (field name),紧跟冒号“:“ (colon),后跟字段体(field body),最后以回车换行符 (CRLF)终止。即 信头字段 = 字段名:字段体 CRLF 字段名必须由除了冒号和空格以外的可打印 USASCII 字符(其值在 33 和 126 之 间)组成,大多数字段的字段名称由一系列字母,数字组成,中间经常插入横线符。字 段名告诉电子邮件软件如何翻译该行中剩下的内容。 字段体可以包括除了 CR 和 LF 之外的任何 ASCII 字符。但是其中的空格,加括号的注 释,引号和多行字段都比较复杂,另外,字段体的语法和语义依赖于字段名,每个类 型的字段有特定的格式。RFC822 为信件定义了一些标准字段,并提供了用户自行定义 非标准字段的方 3.2.2 结构化字段和非结构化字段 每个字段所包含的信息不同,字段大体可以分为结构化字段和非结构化字段。 结构化字段有特定的格式,由语法分析程序检测。Sender 字段就是一个很好的例 子,它的字段内容是信箱, 有一个离散的结构。 非结构化的字段含有任意的数据,没有固定格式。例如,Subject 字段可以含有任 意的文字,并且没有固定格式。非结构化的字段数量较少,只有 Subject、 Comments、扩展字段,非标准字段、INReply 和 References 等。所有其它字段都是 结构化的。 3.2.3 信头字段的元素 尽管 Email 信件的总体结构非常简单,但一些信头字段的结构是很复杂的。下面 介绍一些大多数字段共有的元素。 (1)空白符 长沙航空职业技术学院毕业设计 像其它文本文件一样,空白符包括空格符(ASCII 码 32)和制表符 Tab(ASCII 码 19)。 此外,行末的回车换行符 CRLF 也应算是空白符。使用空白符可以对字段进行格式化, 增加它的可读性。例如,每个字段间用 CRLF 来分离,在字段内用空格来分隔字段名和 字段内容。在 Subject 后面的冒号和内容之间插入空格字符,会使字段结构更加清晰。 在 Email 中,空白符的使用并没有固定的规则,但应当正确地使用,仅在需要时才使 用空白符,以便接收软件进行语法分析。 (2)注解 注解是由括号括起来的一系列字符,例如,(这份礼物)。注解一般用在非结构化 的信头字段中,没有语法语义,仅为人提供了一些附加的信息。如果在加引号的字符 串中有包括在括号中的字符,那是字符串的一部分,不是注解。在解释信件的时候, 会将注解忽略,可以用一个空格字符代替它们,这样就什么也不会破坏。 (3)字段折叠 每个信头字段从逻辑上说应当是一个由字段名、冒号、字段体和 CRLF 组成的单一 的行,但为了书写与显示的方便,增加可读性,也为了符合 1000/80 的行字符数的限 制,可以将超过 80 个字符的信头字段分为多行,即对于比较长的字段,可以分割成几 行,形成折叠。在结构化和非结构化字段中都允许折叠。通过在字段中某些点插入 CRLF 符和至少一个或多个空白字符来实现字段的折叠,第一行后面的行称为信头字段 的续行。续行都以一个空白符开始,这种方法称为折叠(folding),例如标题字段 Subject: This is a test 可以表示为:Subject: This is a test 反之,将一个被折叠成多行的信头字段恢复到它的单行表示的过程叫做去折叠, 只要简单地移除后面跟着空格的 CRLF,将折叠空白符 CRLF 转换成空格字符,就可以完 成去折叠(unfolding)。在分析被折叠的字段的语法时,要把一个多行的折叠字段展开 为一行,根据它的非折叠的形式来分析它的语法与语义。 (4)字段大小写 字段名称是不区分大小写的,所以 Subject、subject 或 SUBJECT 都一样。不过字 段名称大小写有习惯的常用形式,如主题字段的大小写形式通常为 Subject。字段体的 大小写稍微复杂点,要视情况而定。比如 Subject 后面的字段体,其中的大写可能就 是缩写的专用名词,不能改动。 3.2.4 标准的信头字段 下面介绍 RFC822 中定义的常用的标准信头字段。 表 3-1 RFC822 常用的标准信头字段 与发信方有关的信头字段 格式:From:mailbox 举例: 写信人字段。说明信件的原始创建者,给出他的 电子信箱地址。创建者对信件的原始内容负责。 ASP.NET 邮件收发系统 From: 格式:Sender:mailbox 举例: From: Sender: 发送者字段。说明实际提交发送这个信件的人, 给出他的电子信箱地址。当发信人与写信人不一 样时使用。比如,秘书替经理发信。发送者对发 送负责。 格式:Reply- TO:mailbox 举例: From: From: 回复字段。指定应当把回信发到哪里。如果有此 字段,回信将会发给它指定的邮箱,而不会发给 From 字段指定的邮箱。比如,发送的是经理的信, 但回信应交办公室处理。 与收信方有关的信头字段 格式:TO:mailbox list 举例:TO: 收信人字段。指定主要收信人的邮箱地址,可 以是多个邮箱地址的列表,地址中间用逗号隔 开。 格式:Cc:mailbox list 举例:Cc: 抄送字段。指定此信件要同时发给哪些人,也 称为抄送。也可以使用邮箱地址列表,抄送给 多个人。 格式:Bcc:mailbox list密抄字段。指定此信件要同时秘密发给哪些人, 也称为密件抄送。也可以使用邮箱地址列表, 密抄给多个人。 其它的信头字段 格式:Date:date-time 举例:Date:Tue,04 Dec 2004 16:18:08 +800 日期字段:Date 字段含有电子邮件创建的日期 和时间。 格式:Subject:*text 举例:Subject:Hello! Subject:Re:Hello! 信件主题字段。描述信件的主题。当回复信件 时,通常在主题前面增加“Re:”前缀,标记 为该信件为回复信件:当信件被转发时,通常 在主题文字前面加上“Fw:”,“Fwd:”这样 的前缀。 格式:Received:“from“ domain ;发送主机 “by“ domain ;接收主 机 “via“ atom ;物理路 接受字段。是投递信件的特定邮件服务器所作 的记录。处理邮件投递的每个服务器必须给它 处理的每个信头的前面加一个 Received 字段, 用以描述信件到达目的地所经过的路径以及相 关信息。当跟踪各个电子邮件问题时,这个信 长沙航空职业技术学院毕业设计 径 “id“ msg-id ;接收者 msg id 息很有帮助。 举例:Received:from wang195.0.0.1 by li129.5.0.4 Tue dec 2003 12:18:02 +800 格式:Comments:*text注释字段。用于把一个注解添加到信件中。 格式:Resent-* 举例:Resent-From Resent-Sender Resent-date Resent-Reply-To 重发字段。当需要把收到的信件重发给另一组收 信人的时候,可以保持整个原始信件不变,并简 单地产生重发信件所要求的新信头字段。为避免 与以前的字段相混。新添加的信头字段都加上 Resent-前缀字符串,它们的语法与未加前缀的 同名字段相同。 格式:Message-ID:msg- id 信件标识字段。用于表示一个信件唯一标识,该 字段通常有 Smtp 服务器生成,这个值通常是唯 一的。形式根据使用的软件而定。通常左边是标 识符,右边指定电脑名 表 3-1 中的关键字表明了电子邮件借用了办公室备忘录中的概念和术语:电子邮 件的头部能够包含一行说明应当接收到该备忘录的接收方。象传统的办公室备忘录一 样,电子邮件使用关键字 Cc 指明一个复写副本(carbon copy).电子邮件软件必须向 Cc:后 面的电子邮件地址表中的每个地址发送一份消息的副本。 传统的办公室过程要求备忘录的发送方通知接收方副本是否传给其它人。有时发 送方希望将备忘录的一个副本给别人而不显示出有一个副本被发送出去。一些电子邮 件系统提供这样的选项,遵循传统的办公室术语,用盲复写副本(blind carbon copy) 来表示。创建消息的用户 在关键字 Bcc 后给出一个电子邮件地址表,指定一个或多个盲复写副本。虽然 Bcc 在发送方出现,但当信息发送时,邮件系统将它从消息中除去。每个接收方必须检查 头部的 To 和 Cc 行以决定信息是直接发送还是作为盲副本发送的(有些邮件系统在正文 部分附加信息来告诉接收者它是一个盲副本)。其它接收者不知道有哪些用户接收到盲 副本。 电子邮件使用与传统的办公室备忘录相同的格式和术语:头部包括与消息有关的 信息,正文包括消息文本。电子邮件头部的行说明发送方、接收方、日期、主题、应 当收到副本的人的列表。 (1)扩展字段 ASP.NET 邮件收发系统 如果想在信头中加入 RFC822 中没有规定的字段,就需要创建非标准字段。方法非 常简单,只要在自定义的信头字段名的前面使用 X-前缀。RFC822 将这种方法称为扩展 字段。事实上已经有许多扩展字段被广泛应用,但没有标准定义。例如: X-LOOP 字段 X-LOOP 字段用来防止邮件的循环传送。过滤或邮件列表处理程序,可以给它处理 的每个信件增加一个 X-LOOP 字段,以后就可以根据这个字段中含有的特别值,判断一 个信件是否被循环传送。如果确认邮件发生了循环,过滤或邮件列表处理程序就可以 用不同的方式处理该信件。 X-Mailer 字段 X-Mailer 字段用于指示什么样的程序产生了这个信件,它是使用最广泛的扩展字 段。产生邮件的软件可以为所有发送的信件增加合适的 X-Mailer 字段,该字段不仅含 有软件的名称,还包含软件的版本号。 (2) 普通关键字 下表 3-2 列出了一些在因特网电子邮件中可以找到的普通关键字,以及它们的含 义。 信头字段目的 From邮件作者 Sender发信人 Reply-To回邮地址 To收信人地址 CC抄送:另一个收信人地址 BCC密送:收信人地址,但其 它收信人看不到这个收信人的 地址。 Subject主题 Comments备注 Keywords关键字,用来进一步搜索 邮件 In-Reply-To被当前邮件回复的邮件的 ID 长沙航空职业技术学院毕业设计 References几乎同 In-Reply-To 一样 Encrypted加密邮件的加密类型 Date发信日期 3.3 SMTP 协议简介及工作原理 3.3.1 介绍 简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统 而且仅要求一条可以保证传送数据单元顺序的通道。 SMTP 的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通 信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传 送系统(或 IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的 IPCE 通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同 IPCE 上的进 程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。 3.3.2 SMTP 模型 SMTP 设计基于以下通信模型:针对用户的邮件请求,发送 SMTP 建立与接收 SMTP 之间建立一个双向传送通道。接收 SMTP 可以是最终接收者也可以是中间传送者。SMTP 命令由发送 SMTP 发出,由接收 SMTP 接收,而应答则反方面传送。 一旦传送通道建立,SMTP 发送者发送 MAIL 命令指明邮件发送者。如果 SMTP 接收 者可以接收邮件则返回 OK 应答。SMTP 发送者再发出 RCPT 命令确认邮件是否接收到。 如果 SMTP 接收者接收,则返回 OK 应答;如果不能接收到,则发出拒绝接收应答(但 不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特 别的序列,如果接收者成功处理了邮件,则返回 OK 应答。 SMTP 提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮 件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时, 通过中继 SMTP 服务器传送。为了能够对 SMTP 服务器提供中继能力,它必须拥有最终 目的主机地址和邮箱名称。 ASP.NET 邮件收发系统 MAIL 命令参数是回复路径,它指定邮件从何处来;而 RCPT 命令的参数是转发路径 的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生 错误时返回邮件)。 当同一个消息要发往不同的接收者时,SMTP 遇到了向不同接收者发送同一份数据 的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。 在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。 命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的 混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏 感的。这样 SMTP 实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不 敏感。 命令与应答由 ASCII 字母表组成,当传送服务提供 8 位字节传送通道,每 7 位字 符正确传送,而最高位被填充为 0。当指定一般的命令或应答格式后,参数会由一些类 似于语言的字符串表示出来,如“或“,这里尖括号表示这 是一种类似于语言的变量。 3.4 SMTP 协议的命令和应答 3.4.1 SMTP 协议的命令 SMTP 命令是发送于 SMTP 主机之间的 ASC信息,可能使用到的命令如下表所示。 SMTP 协议命令 命令描述命令描述 DATA 开始信息写作 RSET 重置会话,当前传输 被取消 EXPN 验证给定的邮 箱列表是否存 在,扩充邮箱 列表,也常被 禁用 SAML FROM 发送邮件到用户终端 和邮箱 HELO 向服务器标识 用户身份,返 SEND FROM 发送邮件到用户终端 长沙航空职业技术学院毕业设计 回邮件服务器 身份 HELP 查询服务器支 持什么命令, 返回命令中的 信息 SOML FROM 发送邮件到用户终端 或邮箱 MAIL FROM 在主机上初始 化一个邮件会 话 TURN 接收端和发送端交换 角色 NOOP 无操作,服务 器应响应 OK VRFY 用于验证指定的用户/ 邮箱是否存在;由于 安全方面的原因,服 务器常禁止此命令 QUIT 终止邮件会话 RCPT TO 标识单个的邮件接收 人;常在 MAIL 命令后 面可有多个 rcpt to : 3.4.2 SMTP 的应答码 对 SMTP 命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也 保证了发送 SMTP 知道接收 SMTP 的状态。每个命令必须有且只有一个响应。 SMTP 响应由三位数字组成,其后跟一些文本。数字帮助决定下一个应该进入的状 态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本, 文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每 次接收到的文本可能不同。在附录 E 中可以看到全部的响应码。正规的情况下,响应 由下面序列构成:三位的数字,一行文本和一个,或者也可以是一个多 行响应。只有 EXPN 和 HELP 命令可以导致多行应答,然而,对所有命令,多行响应都 是允许的。 REPLY CODES BY FUNCTION GROUPS 500 格式错误,命令不可识别(此错误也包括命令 行过长) ASP.NET 邮件收发系统 501 参数格式错误 502 命令不可实现 503 错误的命令序列 504 命令参数不可实现 211 系统状态或系统帮助响应 214 帮助信息 220 服务就绪 221 服务关闭传输信道 421 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任 何命令的响应) 250 要求的邮件操作完成 251 用户非本地,将转发向 450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙) 550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问) 451 放弃要求的操作;处理过程中出错 551 用户非本地,请尝试 452 系统存储不足,要求的操作未执行 552 过量的存储分配,要求的操作未执行 553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误) 354 开始邮件输入,以.结束 554 操作失败 长沙航空职业技术学院毕业设计 4 重要模块设计 4.1 用户登录模块 输入用户名和密码、验证码进行身份验证,进入邮件管理模块。 4.2 用户邮箱主页 用户邮箱主页,邮箱的主要功能显示 ASP.NET 邮件收发系统 4.3 收件箱 4.4 发件箱 4.5 删除邮件 4.6 通讯录 长沙航空职业技术学院毕业设计 4.7 草稿箱 4.8 新建联系人 4.9 写信 ASP.NET 邮件收发系统 4.10 邮件转发 5 主要功能介绍 5.1 用户登录模块 用户输入用户名、密码、验证码,与数据库信息进行比对,如果输入正确将登录到邮 件系统,反之会弹出错误信息。 string sql = “select * from userInfo where UserName=“+UserName +“ and password=“+passWord +“; SqlDataReader reader =con .GetList (sql ); if (reader.Read() this.Session“userName“ = UserName; 长沙航空职业技术学院毕业设计 Response.Redirect(“Main/MainPage.aspx“); else string scriptText = “alert(用户名或密码错误!请联系您所交流的 客服QQ或电话!);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); 。 5.2 框架的搭建 5.2.1 主要架构: 对不起,您的浏览器不支持框架 5.2.2 友情链接图片 Log 及链接: var curIndex=0; var timeIntervar=1000; var arr=new Array (); ASP.NET 邮件收发系统 var Ihref=new Array (); arr 0=“/Image/local.jpg“; arr 1=“/Image/sina.jpg“; arr 2=“/Image/126.JPG“; arr 3=“/Image/yahoo.jpg“; arr 4=“/Image/qqq.jpg“; Ihref0=“#“; Ihref 1=“http:/ Ihref 2=“http:/ Ihref 3=“http:/ Ihref 4=“https:/ setInterval (changeImg,timeIntervar ); function changeImg() var obj=document.getElementById (“image“); var imgHref=document .getElementById (“imageHref“); for(var i=0;i 0) string scriptText = “alert(删除成功);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); else string scriptText = “alert(删除失败);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), scriptText, true); 5.6 通讯录 5.6.1 绑定通讯录: int totalCount = 0; int pageSize = 15; int pageCount = 0; totalCount = conn.count(“select count(1) from contract “); if (totalCount % pageSize = 0) ASP.NET 邮件收发系统 pageCount = totalCount / pageSize; else pageCount = totalCount / pageSize + 1; this.GvPage.PageCount = pageCount; this.GvPage.PageIndex = pageIndex; this.GvPage.RecordCount = totalCount; string sql = “select * from contract “; gvContract.DataSource = conn.GetGrid_Pages_not(sql); gvContract.DataBind(); 5.6.2 删除联系人: string sql = “delete from contract where CID in (“ + str + “)“; int res = conn.ExeSql(sql); 5.7 草稿箱 5.7.1 草稿箱的数据绑定: int totalCount = 0; int pageSize = 15; int pageCount = 0; totalCount = conn.count(“select count(1) from sentLetter where isDraf=Ture“); if (totalCount % pageSize = 0) pageCount = totalCount / pageSize; else pageCount = totalCount / pageSize + 1; 长沙航空职业技术学院毕业设计 this.GvPage.PageCount = pageCount; this.GvPage.PageIndex = pageIndex; this.GvPage.RecordCount = totalCount; ltCount.Text = totalCount.ToString(); string sql = “select * from sentLetter where isDraf=True“; gvDraf . DataSource = conn.GetGrid_Pages_not(sql); gvDraf.DataBind(); 5.7.2 草稿箱数据的删除: string sql = “delete from sentLetter where sentId in (“ + str + “)“; int res = conn.ExeSql(sql); 5.8 联系人 添加联系人: string str = “; StringBuilder insertSql = new StringBuilder(); insertSql.AppendFormat (“insert into contract values(0,1,2,3,4,5,6)“,txtCName .Text .ToString (),this.rblSex .SelectedValue .ToString (),txtCAddr .Text .ToString (),txtCEmail .Text .ToString (),txtCQQ .Text .ToString (),txtCPhone .Text .ToString (),txtCRemark .Text .ToString (); int res = conn.ExeSql(insertSql.ToString(); if (res 0) str = “alert(恭喜添加联系人成功);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), str, true); Refresh(); else str = “alert(添加联系人失败);“; Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), str, true); ASP.NET 邮件收发系统 5.9 邮件转发 邮件的转发,根据参数的传递,有草稿箱 Response.Redirect(“writter.aspx?ID=“ + ID+“、收件箱 Response.Redirect(“writter.aspx?ID=“ + ID + “ 、发件箱 Response.Redirect(“writter.aspx?ID=“ + ID + “、删除箱 Response.Redirect(“writter.aspx?ID=“ + ID+“的邮件进行转发。转发时 进行判断,获取数据: if (Request.QueryString“Opt“ != null) Opt = Request.QueryString“Opt“.ToString(); switch (Opt) case “draf“: sentLetterBind(); break; case “getLetter“: getLetterBind(); break; case “sentLetter“: sentLetterBind(); break; case “deleteLetter“: getLetterBind(); break; default: Refresh(); break; sentLetterBind(): string drafSql = “select * from sentLetter where sentId=“+id ; getLetterBind(): string drafSql = “select * from getLetter where ID=“ + id; 绑定数据: SqlDataReader dataReader = conn.GetList(drafSql); if (dataReader.Read() txtSubject.Text = dataReader“getTitle“.ToString(); d_content.Value = “-原始文件- “; d_content.Value += dataReader“getContent“.ToString(); 长沙航空职业技术学院毕业设计 6 数据库设计 6.1 登录系统 CREATE TABLE dbo.userInfo( UserId int IDENTITY(1,1) NOT NULL, UserName varchar(50) COLLATE Chinese_PRC_CI_AS NULL, password varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_userInfo PRIMARY KEY CLUSTERED ( UserId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY 6.2 收件箱 CREATE TABLE dbo.getLetter( ID int IDENTITY(1,1) NOT NULL, getTitle varchar(50) COLLATE Chinese_PRC_CI_AS NULL, getContent text COLLATE Chinese_PRC_CI_AS NULL, getTime datetime NULL, getStatus bit NULL, getter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, senter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, getFile varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_getLetter PRIMARY KEY CLUSTERED ( ID ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY TEXTIMAGE_ON PRIMARY 6.3 发件箱 CREATE TABLE dbo.sentLetter( sentId int IDENTITY(1,1) NOT NULL, sentTitle varchar(50) COLLATE Chinese_PRC_CI_AS NULL, sentContent text COLLATE Chinese_PRC_CI_AS NULL, ASP.NET 邮件收发系统 sentTime datetime NULL, sentStatus bit NULL, senter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, isDraf bit NULL CONSTRAINT DF_sentLetter_isDraf DEFAULT (0), getter varchar(50) COLLATE Chinese_PRC_CI_AS NULL, sentFile varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_sentLetter PRIMARY KEY CLUSTERED ( sentId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY TEXTIMAGE_ON PRIMARY 6.4 联系人 CREATE TABLE dbo.userInfo( UserId int IDENTITY(1,1) NOT NULL, UserName varchar(50) COLLATE Chinese_PRC_CI_AS NULL, password varchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_userInfo PRIMARY KEY CLUSTERED ( UserId ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY 7 结论 这次编写的邮件收发管理系统,主要是邮件的发送的功能。在熟悉了专门用于发 送接收邮件的 SMTP 协议和 POP3 协议以及 RFC 规定的邮件的格式的基础上,从实际使 用情况做起,一步步的与服务器进行交互操作,最终实现发送接收普通邮件以及附件 的功能。总之,通过这次的编程,使我对网络编程有了一个很好的认识和锻炼,也使 我对.NET 这一语言的掌握程度又上了一个新台阶,虽然编出来的软件不能和功能强大 的各种邮件收发管理系统相提并论,但是相信它简单,易操作性,和很多强大的软件 比起来,更多了几分实用性。以后的日子,随着我技术的提高和思想的成熟,我一定 会把它做的更好,更趋近于完美。 长沙航空职业技术学院毕业设计 8 参考文献 1 尚俊杰ASP.NET 程序设计M北京:清华大学出版社,北京交通大学出版 社2004 2 刘振岩基于.NET 的 Web 程序设计M电子工业出版社2006 3 Dino Esposito 著,施平安 译ASP.NET 2.0 技术内幕北京:清华大学出版 社2006 4Kouresh Ardestani 著,张哲峰 译高效掌握 ADO.NETC#编程篇北京:清华 大学出版社2003 5余金山ASP.NET 2.0+SQL Server 2005 企业项目开发与实战北京:电子工业 出版社2008 6Jim Arlow,IIa NeustadtUML 2 and the Unified Process:PracticalObject- Oriented Analysis and Design,Second Edition北京:人民邮电出版社2006 7陈萱华如何利用 ASP.NET 技术访问数据库计算机与现代化2003 (2) 9 致谢 三年的大学生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我 将面对又一次征程的开始。我的整个毕业设计从 3 月中旬正式开始,感谢我的导师, 谢谢你在我不知道解决难题的时候给予我的帮助,指导我完成毕业设计。感谢我的辅 导员,无论在学习还是生活上给我们的无微不至的关怀,让我们感受到集体的温暖。 感谢我的朋友们,一起努力奋斗的走过大学生活的朋友们,让我们在这个陌生的地市 不寂寞,谢谢你们在我不懂的时候告诉我怎么做。感谢长沙航空职业技术学院,为我 们提供了良好的学习环境和生活环境,让我们学会技术技巧和结识了五湖四海的朋友 们。感谢湖南博源科技有限公司的同事和领导们,让我在贵公司实习,学习项目开发 的整个过程,让我懂得我和企业的距离。 最后再一次感谢所有在毕业设计中曾经帮助过我的良师益友和同学,以及在设计中 被我引用或参考的论著作者,谢谢你们。
展开阅读全文