




免费预览已结束,剩余35页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓姓 名名 专业专业 班班 题题 目目 简单电子邮件客户端的实现简单电子邮件客户端的实现 设设 计计 任任 务务 电子邮件是当今互联网上最受欢迎的功能之一 当今人们使用电子邮件基本包括 Web 使用方式和电子邮件的客户端软件登录方式 由于客户端软件登录方式无需登录网页 同时 可以对信件下载 人们可以在不用上 web 网页的情况下随时阅读信件 因此客户端软件登 录方式很受到人们的欢迎 电子邮件的主要功能包括 1 发送系统 可以发送整个信件 同时信件可以是带附件的 图片 视频 音乐 文本 等等 2 接收系统 可以接收新的邮件 可以下载附件 开发工具 Visual c 6 0 时时 间间 进进 度度 第 17 周 2010 06 28 2010 07 02 查看书籍 对电子邮件方面的知识了解 并下载 JMail 组件 为编写程序做准备 第 18 周 2010 07 05 2010 07 09 编写代码 调试程序 实现电子邮件的接收与发送 第 19 周 2010 07 12 2010 07 16 系统测试 完成实践报告 原主原主 始始 要要 资资 参参 料料 考考 与与 文文 献献 01 葛亮 Visual C 从入门到实践 清华大学出版社 2009 9 02 汪晓平 钟军 Visual C 网络通信协议分析与应用实现 人民邮电出版社 2003 2 03 网页 电子邮件客户端开发软件 04 网页 电子邮件介绍 05 网页 SMTP 协议 06 网页 POP3 协议 指指导导教教师师签签字字 年年 月月 日日 I 摘摘 要要 电子邮件客户端软件可以更快的是用户接收邮件 电子邮件服务作为 Internet 上应用 最多和最广的服务项目得到了非常广泛的应用 在网络应用中也起到非常重要的作用 如同其他的网络服务 电子邮件系统也有其使用的传输协议 包括 SMTP Simple Mail Transfer Protocol 简单邮件传输协议 POP3 Post Office Protocol 邮局协议 和 IMAP Internet Message Access Protocal 消息访问协议 等 这些协议应用于电子邮件 的发送和接收 一些邮件处理软件如 OutLook Express 和 FoxMail 等就是按照 SMTP 和 POP3 协议结合 Windows Sockets 套接字进行设计来收发邮件的 在 Visual C 6 0 编程环境下按照 SMTP 协议通过套接字发送 SMTP 命令 按照 POP3 协议接收并处理邮件服务器的反馈信息 从而实现对电子邮件的发送与接收 简单电子邮件客户端使接收和发送电子邮件简单化 使用户不用看那些繁琐的电子 邮件客户端 能够更加简便 快捷的接收与发送电子邮件 当前流行的各种邮件接收发送系统都新添加了很多功能 但相对来说 大多数的功 能都是一些多余的 各种功能对于计算机知识相对缺乏的人来说只是使界面显得更加漂 亮而已 但是却不太实用 由此 我们利用 Visual C 6 0 开发了这个功能简单但实用的 简单电子邮件客户端 简化了很多不必要的功能 无需登陆 WEB 界面即可接收和发送邮 件 方便了查看 节省了时间 尽管没有群发或者密送功能 但是相对来说比较简单 是大多数的人能够尽快使用 关键词 关键词 Jmail Smtp Pop3 发送模块 接收模块 目目 录录 摘摘 要要 I 第第 1 章章 引言引言 1 1 1 电子邮件介绍 1 1 2 开发背景 2 1 3 开发环境及运行环境 2 1 3 1 开发环境 2 1 3 2 运行环境 2 第第 2 章章 简单电子邮件客户端系统设计分析简单电子邮件客户端系统设计分析 3 2 1 邮件发送 3 2 2 邮件接收 3 2 3 系统设计模型 3 2 4 MAPI 简单介绍 4 第第 3 章章 SMTP 协议研究协议研究 5 3 1 介绍 SMTP 协议 5 3 2 SMTP 模型 5 3 3 SMTP 协议的命令 6 3 3 SMTP 的应答 11 第第 4 章章 POP3 协议简析协议简析 13 4 1 介绍 POP3 协议 13 4 2 POP3 协议简析 13 4 2 1 工作原理 13 4 2 2 POP3协议的命令 应答及回话 14 第第 5 章章 模块设计与测试模块设计与测试 16 5 1 JMAIL组件的使用 16 5 2 系统窗体的组成 18 5 3 发信模块设计 20 5 4 收信模块设计 20 5 5 模块测试 22 5 5 1 发信测试 22 5 5 2 收信测试 22 第第 6 章章 结束语结束语 25 附录附录 主要源程序主要源程序 28 1 发信 写信按钮 28 2 添加附件 28 3 是否删除附件 29 4 确定按钮 29 5 收信 32 6 重载 ONINITDIALOG 函数 33 7 开始接收邮件 34 8 显示附件 35 9 下载附件 36 姓名 贾志波 课题名称 简单电子邮件客户端的实现 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 电子邮件的基本原理 是在通信网上设立 电子信箱系统 它实际上是一个计算 机系统 系统的硬件是一个高性能 大容量的计算机 硬盘作为信箱的存储介质 在硬盘 上为用户分一定的存储空间作为用户的 信箱 每位用户都有属于自己的 个电子信箱 并确定 个用户名和用户可以自己随意修改的口令 存储空间包含存放所收信件 编辑 信件以及信件存盘三部分空间 用户使用口令开启自己的信箱 并进行发信 读信 编辑 转发 存档等各种操作 系统功能主要由软件实现 3 电子邮件的通信是在信箱之间进行的 用户首先开启自己的信箱 然后通过键入 命令的方式将需要发送的邮件发到对方的信箱中 邮件在信箱之间进行传递和交换 也可 以与另 个邮件系统进行传递和交换 收方在取信时 使用特定账号从信箱提取 姓名 贾志波 课题名称 简单电子邮件客户端的实现 2 常见的一些电子邮箱 微软睿邮 网易 163 邮箱 网易 126 邮箱 网易 188 邮箱 网易 Yeah 邮箱 新浪邮箱 Foxmail QQ 邮箱 TOM 邮箱 搜狐闪电邮 雅虎邮箱 Gmail 邮箱 Hotmail Live Mail eYou 邮箱 35 邮箱 中华网邮箱 中国网邮箱 移动 139 邮箱 21cn 邮箱 AOL 邮箱 Mail 邮箱 Inbox 邮箱 1 2 开发背景开发背景 当前流行的各大邮件客户端软件的除了最主要的收发信件之外 功能越来越复杂 但是人们平常真正用到的功能很少 很多功能尤其对于那些计算机知识相对缺乏的人来说 更加显得太过于华丽而不太实用 有鉴于此 我们利用 Visual C 6 0 开发了这个功能相 对简单实用的邮件客户端程序 简化了很多不必要的功能 1 3 开发环境及运行环境开发环境及运行环境 当前流行的各种邮件接收发送系统都新添加了很多功能 但相对来说 大多数的功 能都是一些多余的 各种功能对于计算机知识相对缺乏的人来说只是使界面显得更加漂 亮而已 但是却不太实用 由此 我们利用 Visual C 6 0 开发了这个功能简单但实用的 简单电子邮件客户端 简化了很多不必要的功能 1 3 1 开发环境 Visual C 6 0 1 3 2 运行环境 邮件客户端运行在 Windows 2000 或 Visual C 6 0 操作系统平台 姓名 贾志波 课题名称 简单电子邮件客户端的实现 3 第第 2 章章 简单电子邮件客户端系统设计分析简单电子邮件客户端系统设计分析 前面简要介绍了电子邮件的工作原理及开发运行环境及其背景 下面简要介绍一下 电子邮件客户端系统开发的设计分析 2 1 邮件发送邮件发送 现在大多数的客户端程序都由一项设置称为 我的 SMTP 服务器需要身份验证 这 就是说平时所用的 SMTP 服务器都需要对发送邮件者的身份进行验证 例如 smtp sina com 等都需要进行身份验证 在实际中 进行身份验证所实用的是 ESMTP Extended SMTP 扩展 SMTP 协议 ESMTP 协议就是对标准 SMTP 协议进行了扩展 在使用 SMTP 进行邮件发送时并不 要求必须进行身份验证既可以发送匿名邮件 当然现在大多数的服务器要求进行身份验 证以后才可以发送邮件 这也正是 ESMTP 协议发展的原因 利用 ESMTP 发信时 服务 器会要求用户提供用户名和密码以便验证身份 只有验证通过之后才可以进行发送邮件 2 2 邮件接收邮件接收 邮件的接收仅仅是 POP3 协议 在本系统中也采用 POP3 协议进行接收邮件 在用户 输入密码和用户名以后 进行邮件的读取 同时将邮件的标题列出 最后在用户选择某 个邮件时显示邮件的正文 邮件的接收是本系统较为简单的一部分 在实际的开发过程中 可以方便的进行邮 件接收的一些处理 例如 邮件的过滤等 2 3 系统设计模型系统设计模型 需要设计一个电子邮件的客户端程序 其实际内容就是实现邮件的发送和接收问题 但是 如果手动从设计指令到底层数据流的实现这是很难实现的 甚至说去完成 SMTP 和 POP3 功能就十分困难 同时还需要设计包括 base4 编码的问题 实际上 Visual C 程 序中提供邮件支持功能的时候 可以有许多选择 1 根据 SMTP 协议 POP3 协议 ESMTP 等协议从零开始实现 即利用基本的协 议 然后利用 TCP 协议进行邮件协议数据的传输 这时侯必须利用相应的邮件协议进行 数据传输 由于在数据传输过程中需要使用多个协议的命令形式 因此必须充分了解邮 件协议的命令行的具体意义和协议的基本过程 姓名 贾志波 课题名称 简单电子邮件客户端的实现 4 2 利用 MAPI 调用支持 MAPI 的邮件发送程序发送邮件 这种实现方式需要客户 端安装指定的邮件发送程序 例如调用 Windows 下的 Outlook Express 客户端软件进行邮 件的传输 但是这种情况下使用的是客户端软件 不够灵活 3 利用现成的组件例如 JMail 组件来构建您的系统 JMail 组件功能强大 可以轻 松的完成邮件发送 接收 加密 集群传输等工作 并且该组件提供了免费的版本 因 此用户要遵循其协议就可以方便的使用该组件了 通过上面的分析可以看到 利用 JMail 构建整个系统是十分方便的 虽然 JMail 用的 最多的是 ASP 下的使用 但它在其他语言中都能够很好的进行工作 本系统的设计利用 JMail 组件的这一特点 姓名 贾志波 课题名称 简单电子邮件客户端的实现 5 姓名 贾志波 课题名称 简单电子邮件客户端的实现 6 第第 3 章章 SMTP 协议研究协议研究 由于要开发的是电子邮件客户端程序 就不得不用到 SMTP 协议和 POP3 协议 为邮 件发送功能 就涉及到 SMTP Simple Mail Transfer Protocol 协议 SMTP 被用来在因特 网上发送邮件 该协议规定了一些基本的命令和方法使客户端与服务器进行交互 以达 到发送邮件的目的 3 1 介绍介绍 SMTP 协议协议 简单邮件传输协议 SMTP 的目标是可靠高效地传送邮件 它独立于传送子系统而 且仅要求一条可以保证传送数据单元顺序的通道 SMTP 的一个重要特点是它能够在传送中接力传送邮件 传送服务提供了进程间通信 环境 IPCE 此环境可以包括一个网络 几个网络或一个网络的子网 理解到传送系统 或 IPCE 不是一对一的是很重要的 进程可能直接和其它进程通过已知的 IPCE 通信 邮件是一个应用程序或进程间通信 邮件可以通过连接在不同 IPCE 上的进程跨网络进行 邮件传送 更特别的是 邮件可以通过不同网络上的主机接力式传送 其工作有两种情 况 1 电子邮件从客户机传输到服务器 2 从某一个服务器传输到另一个服务器 该协议在传输文件过程中使用 TCP 的 25 号端口 其基本原理是 SMTP 是基于 TCP 服务的应用层协议 由 RFC0821 定义 其规定的命令是以明文方式进行的 SMTP 是个请求 响应协议 通常有两种工作模式 发送 SMTP 和接收 SMTP 3 2 SMTP 模型模型 SMTP 设计基于以下通信模型 针对用户的邮件请求 发送 SMTP 建立与接收 SMTP 之间建立一个双向传送通道 接收 SMTP 可以是最终接收者也可以是中间传送者 SMTP 命令由发送 SMTP 发出 由接收 SMTP 接收 而应答则反方面传送 一旦传送通道建立 SMTP 发送者发送 MAIL 命令指明邮件发送者 如果 SMTP 接 收者可以接收邮件则返回 OK 应答 SMTP 发送者再发出 RCPT 命令确认邮件是否接收到 如果 SMTP 接收者接收 则返回 OK 应答 如果不能接收到 则发出拒绝接收应答 但 不中止整个邮件操作 双方将如此重复多次 当接收者收到全部邮件后会接收到特别的 序列 如果接收者成功处理了邮件 则返回 OK 应答 SMTP 提供传送邮件的机制 如果接收方与发送方连接在同一个传送服务下时 邮件 可以直接由发送方主机传送到接收方主机 或者 当两者不在同一个传送服务下时 通 过中继 SMTP 服务器传送 为了能够对 SMTP 服务器提供中继能力 它必须拥有最终目 姓名 贾志波 课题名称 简单电子邮件客户端的实现 7 的主机地址和邮箱名称 MAIL 命令参数是回复路径 它指定邮件从何处来 而 RCPT 命令的参数是转发路径 的 它指定邮件向何处去 向前路径是源路径 而回复路径是返回路径 它用于发生错 误时返回邮件 当同一个消息要发往不同的接收者时 SMTP 遇到了向不同接收者发送同一份数据的 复制品的问题 邮件命令和应答有一个比较奇怪的语法 应答也有一个数字代码 在下 面 例子中可以看到哪些使用实际的命令和应答 完整的命令和应答在第四节 命令与应答对大小写不敏感 也就是说 命令和应答可以是大写 小写或两者的混 合 但这一点对用户邮件名称却不一定是对的 因为有的主机对用户名大小写是敏感的 这样 SMTP 实现中就将用户邮箱名称保留成初始时的样子 主机名称对大小写不敏感 命令与应答由 ASCII 字母表组成 当传送服务提供 8 位字节传送通道 每 7 位字符 正确传送 而最高位被填充为 0 当指定一般的命令或应答格式后 参数会由一些类似于 语言的字符串表示出来 如 或 这里尖括号表示这是一种类似 于语言的变量 3 3 SMTP 协议的命令协议的命令 SMTP 命令定义了邮件传输或由用户定义的系统功能 它的命令是由结束的 字符串 而在带有参数的情况下 命令本身由和参数分开 如果未带参数可以直接 和连接 邮箱的语法格式必须和接收站点的格式一致 下面讨论 SMTP 命令和应 答 发送邮件操作涉及到不同的数据对象 它们由不同的参数相互连接 回复路径就是 MAIL 命令的参数 而转发路径则是 RCPT 命令的参数 邮件日期是 DATA 命令的参数 这些参数或者数据对象必须跟在命令后 这种模式也就要求有不同的缓冲区来存储这些 对象 也就是说 有一个回复路径缓冲区 一个转发路径缓冲区 一个邮件内容缓冲区 特定的命令产生自己的缓冲区 或使一个或多个缓冲的内容被清除 HELLO HELO 此命令用于向接收 SMTP 确认发送 SMTP 参数域包括发送 SMTP 的主机名 接收 SMTP 通过连接确认命令来向发送 SMTP 确认接收 SMTP 引命令和 OK 响应确认发送和 接收 SMTP 进入了初始状态 也就是说 没有操作正在执行 所有状态表和缓冲区已经 被子清除 MAIL MAIL 姓名 贾志波 课题名称 简单电子邮件客户端的实现 8 此命令用于开始将邮件发送到一个多个邮箱中 参数域包括回复路径 返回路径中 包括了可选的主机和发送者邮箱列表 当有主机列表时 它是一个回复路径源 它说明 此邮箱是由在表中的主机一一传递发送 第一个主机是最后一个接收到此邮件的主机 过来的 此表也有作向发送者返回非传递信号的源路径 因为每个传递主机地址都被加 在此表起始处 它就必须使用发送 IPCE 而不是接收 IPCE 如果它们不是一个 IPCE 的话 清楚的名称 一些出错信息的回复路径可能就是空的 此命令清除回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 并且将此命令的 回复路径信息插入到回复路径缓冲区中 RECIPIENT RCPT 此命令用于确定邮件内容的唯一接收者 多个接收者将由多个此命令指定 转发路 径中包括一个可选的主机和一个必须的目的邮箱 当出现主机列表时 这就是一个源路 径 它指明邮件必须向列表中的上一个主机发送 如果接收 SMTP 未实现邮件的传递发 送 就会返回如未知本地用户 550 的信息给用户 当邮件被传递发送时 传递主机必须将自己的名称由转发路径的开始处移至回复路 径的结束处 当邮件最终到达目的地时 接收 SMTP 将以它的主机邮件格式自己的名称 插入目标邮件中 例如 由传递主机 A 接收的带有如下参数的邮件时 FROM TO 将会变成如下形式 FROM TO 此命令导致它的转发路径参数加入转发路径缓冲区中 DATA DATA 接收者将跟在命令后的行作为邮件内容 此命令导致此命令后的邮件内容加入邮件 内容缓冲区 邮件内容可以包括所有 128 个 ASCII 码字符 邮件内容由只包括一个句号 的行结束 也就是如下的字符序列 它指示了邮件的结束 邮件内容的结束指示要求接收者现在就处理保存的邮件内容 此过程将回复路径缓 冲区 转发路径缓冲区和邮件内容缓冲区的内容全部清空 如果操作成功 接收者必须 返回 OK 应答 如果失败也必须返回失败应答 当接收 SMTP 收到一条信息时 无论是用作转发还是此邮件已经到达目的地 它都 必须在邮件内容的开始处加上时间戳这一行 这一行指示了接收到邮件主机和发出此邮 姓名 贾志波 课题名称 简单电子邮件客户端的实现 9 件主机的标识 以及接收到邮件内容的时间和日期 转发的信件将有多行这样的时间戳 当接收 SMTP 作最后一站的传送时 它将返回路径信息行插入邮件中 此行包括了发送 命令中的的信息 在这里 最后一站的传送的意思是邮件将被送到目的用 户手中 但在一些情况下 邮件可能需要更进一步的加工并由另外的邮件系统传送 可能在返回路径中的邮箱与实际发送的邮件不一致 这个情况可能发生在需要传送 一个特定的错误处理信箱而不是信件发送者那里 上面所述说明了 最后的邮件内容由 一个返回路径行 和在其后的一个或多个时间戳行构成 这些行后面是邮件内容的头和 体信息 当处理后面的邮件数据指示部分成功时就需要特定的说明 这种情况可能发生在发 送 SMTP 发现当邮件需要传送给多个用户时 只能够成功地向其中的一部分发送信息这 种情况下 在这种情况下 必须对 DATA 命令发送 OK 应答 而接收 SMTP 组织并发送 一个 不可传递邮件 信息到信息的发送者 在此信息中或者发送一个不成功接收者的列表 或者每次发送一个不成接收者 而发送多次 所有不可传递邮件信息由 MAIL 命令发送 返回路径和接收时间戳例子 Return Path Received from GHI ARPA by JKL ARPA 27 Oct 81 15 27 39 PST Received from DEF ARPA by GHI ARPA 27 Oct 81 15 15 13 PST Received from ABC ARPA by DEF ARPA 27 Oct 81 15 01 59 PST Date 27 Oct 81 15 01 01 PST From JOE ABC ARPA Subject Improved Mailing System Installed To SAM JKL ARPA This is to inform you that SEND SEND 此命令用于开始一个发送命令 将邮件发送到一个或多个终端上 参数域包括了一 个回复路径 此命令如果成功就将邮件发送到终端上了 回复路径包括一个可选的主机列表和发送者邮箱 当出现主机列表时 表示这是一 个传送路径 邮件就是经过这个路径上的每个主机发送到这里的 列表上第一个主机是 最后经手的主机 此表用于返回非传递信号到发送者 因为每个传递主机地址都被加在 此表起始处 它就必须使用发送 IPCE 而不是接收 IPCE 如果它们不是一个 IPCE 的话 清楚的名称 一些出错信息的回复路径可能就是空的 姓名 贾志波 课题名称 简单电子邮件客户端的实现 10 此命令清除回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 并且将此命令的 回复路径信息插入到回复路径缓冲区中 SEND OR MAIL SOML 此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上 或者传送到邮 箱中 对于每个接收者 如果接收者终端打开 邮件内容将被传送到接收者的终端上 否则就送到接收者的邮箱中 参数域包括回复路径 如果成功地将信息送到终端或邮箱 中此命令成功 回复路径包括一个可选的主机列表和发送者邮箱 当出现主机列表时 表示这是一 个传送路径 邮件就是经过这个路径上的每个主机发送到这里的 列表上第一个主机是 最后经手的主机 此表用于返回非传递信号到发送者 因为每个传递主机地址都被加在 此表起始处 它就必须使用发送 IPCE 而不是接收 IPCE 如果它们不是一个 IPCE 的话 清楚的名称 一些出错信息的回复路径可能就是空的 此命令清除回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 并且将此命令的 回复路径信息插入到回复路径缓冲区中 SEND AND MAIL SAML 此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上 并传送到邮箱 中 如果接收者终端打开 邮件内容将被传送到接收者的终端上和接收者的邮箱中 参 数域包括回复路径 如果成功地将信息送到邮箱中此命令成功 回复路径包括一个可选的主机列表和发送者邮箱 当出现主机列表时 表示这是一 个传送路径 邮件就是经过这个路径上的每个主机发送到这里的 列表上第一个主机是 最后经手的主机 此表用于返回非传递信号到发送者 因为每个传递主机地址都被加在 此表起始处 它就必须使用发送 IPCE 而不是接收 IPCE 如果它们不是一个 IPCE 的话 清楚的名称 一些出错信息的回复路径可能就是空的 此命令清除回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 并且将此命令的 回复路径信息插入到回复路径缓冲区中 RESET RSET 此命令指示当送邮件操作将被放弃 任何保存的发送者 接收者和邮件内容应该被 抛弃 所有缓冲区和状态表应该被清除 接收方必须返回 OK 应答 VERIFY VRFY 此命令要求接收者确认参数是一个用户 如果这是 已经知道的 用户名 返回用 户的全名和指定的邮箱 此命令对回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 姓名 贾志波 课题名称 简单电子邮件客户端的实现 11 没有影响 EXPAND EXPN 此命令要求接收者确认参数指定了一个邮件发送列表 如果是一个邮件发送列表 就返回表中的成员 如果这是 已经知道的 用户名 返回用户的全名和指定的邮箱 此命令对回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区没有影响 HELP HELP 此命令导致接收者向 HELP 命令的发送者发出帮助信息 此命令可以带参数 并返 回特定的信息作为应答 此命令对回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 没有影响 NOOP NOOP 此命令不影响任何参数和已经发出的命令 它只是说明没有任何操作而不是说明接 收者发送了一个 OK 应答 此命令对回复路径缓冲区 转发路径缓冲区和邮件内容缓冲区 没有影响 QUIT QUIT 此命令指示接收方必须发送 OK 应答然后关闭传送信道 接收方在接到 QUIT 命令并 做出响应之前不应该关闭通信信道 发送方在发送 QUIT 命令和接收到响应之前也不应该 关闭信道 即使出错 也不应该关闭信道 如果连接被提前关闭 接收方应该象接收到 RSET 命令一样 取消所有等待的操作 但不恢复原先已经做过的操作 而发送方应该象 接收到暂时错误 4XX 一样假定命令和操作仍在支持之中 TURN TURN 此命令指定接收方要么发送 OK 应答并改变角色为发送 SMTP 要么发送拒绝信息并 保持自己的角色 如果程序 A 现在是发送 SMTP 它发出 TURN 命令后接收到 OK 250 应答 它就变成了接收 SMTP 程序 A 就进入初始状态 好象通信信道刚打 开一样 这时它发送 220 准备好服务信号 如果程序 B 现在是接收 SMTP 它发出 TURN 命令后接收到 OK 250 应答 它就变成了发送 SMTP 程序 A 就进入初始状态 好象通信信道刚打开一样 这时它准备接收 220 准备好服务信号 若要拒绝改变角色 接收方可以发送 502 应答 对于这些命令的顺序有一定的限制 对话的第一个命令必须是 HELLO 命令 此命令 在此后的会话中也可以使用 如果 HELLO 命令的参数不可接受 必须由返回一个 501 失 败应答 同时接收到的 SMTP 必须保持在与刚才一致的状态下 NOOP HELP EXPN 和 VRFY 命令可以在会话的任何时候使用 MAIL SEND SOML 或 SAML 命令开始一 姓名 贾志波 课题名称 简单电子邮件客户端的实现 12 个邮件操作 一旦开始了以后就要发送 RCPT 和 DATA 命令 邮件操作可以由 RSET 命 令终止 在一个会话中可以有一个或多个操作 如果在操作开始参数不可接受 必须返回 501 失败应答 同时接收到的 SMTP 必须 保持在与刚才一致的状态下 如果操作中的命令顺序出错 必须返回 503 失败应答 同 时接收到的 SMTP 必须保持在与刚才一致的状态下 会话的最后一个命令必须是 QUIT 命令 此命令在会话的其它时间不能使用 COMMAND 语法格式 命令是由命令码和其后的参数域组成的 命令码是四个字母组成的 不区别大小写 因为下面的命令的作用是相同的 MAIL Mail mail MaIl mAIl 这对于引导任何参数值的标记也是适用的 如 TO 和 to 就是一样的 命令码和参数 由一个或多个空格分开 然而在回复路径和转发路径中的参数是区别大小写的 特别是 在一些主机上 smith 和 Smith 就根本不是一个用户 参数域由不定长的字符串组成 它由结束 接收方在完全接收到此序列前不 会采取任何行动 方括号代表可选的参数域 如果不选择的话 系统选择默认的设置 下面是 SMTP 命令 HELO MAIL FROM RCPT TO DATA RSET SEND FROM SOML FROM SAML FROM VRFY EXPN HELP NOOP QUIT TURN 3 3 SMTP 的应答的应答 对 SMTP 命令的响应是多样的 它确定了在邮件传输过程中请求和处理的同步 也 姓名 贾志波 课题名称 简单电子邮件客户端的实现 13 保证了发送 SMTP 知道接收 SMTP 的状态 每个命令必须有且只有一个响应 SMTP 响应由三位数字组成 其后跟一些文本 数字帮助决定下一个应该进入的状态 而文本对人是有意义的 三位的响应已经包括了足够的信息 不用再阅读文本 文本可 以直接抛弃或者传递给用户 特别的是 文本是与接收和环境相关的 所以每次接收到 的文本可能不同 在附录 E 中可以看到全部的响应码 正规的情况下 响应由下面序列 构成 三位的数字 一行文本和一个 或者也可以是一个多行响应 只有 EXPN 和 HELP 命令可以导致多行应答 然而 对所有命令 多行响应都是允许的 REPLY CODES BY FUNCTION GROUPS 500 格式错误 命令不可识别 此错误也 包括命令行过长 501 参数格式错误 502 命令不可实现 503 错误的命令序列 504 命令参数不可实现 211 系统状态或系统帮助响应 214 帮助信息 220 服务就绪 221 服务关闭传输信道 421 服务未就绪 关闭传输信道 当必须关闭时 此应答可以作为对任何 命令的响应 250 要求的邮件操作完成 251 用户非本地 将转发向 450 要求的邮件操作未完成 邮箱不可用 例如 邮箱忙 550 要求的邮件操作未完成 邮箱不可用 例如 邮箱未找到 或不可访问 451 放弃要求的操作 处理过程中出错 551 用户非本地 请尝试 452 系统存储不足 要求的操作未执行 552 过量的存储分配 要求的操作未执行 553 邮箱名不可用 要求的操作未执行 例如邮箱格式错误 354 开始邮件输入 以 结束 554 操作失败 姓名 贾志波 课题名称 简单电子邮件客户端的实现 14 姓名 贾志波 课题名称 简单电子邮件客户端的实现 15 第第 4 章章 POP3 协议简析协议简析 为实现邮件的接收功能 需要使用 POP3 协议 POP 使用于电子邮件的接收 它使用 TCP 的 110 端口 现在通常用的时第 3 版的 所以简称为 POP3 4 1 介绍介绍 POP3 协议协议 POP3 Post Office Protocol 3 即邮局协议的第 3 个版本 它规定怎样将个人计算机连接 到 Internet 的邮件服务器和下载电子邮件的电子协议 它是因特网电子邮件的第一个离线 协议标准 POP3 允许用户从服务器上把邮件存储到本地主机 即自己的计算机 上 同时 删除保存在邮件服务器上的邮件 而 POP3 服务器则是遵循 POP3 协议的接收邮件服务器 用来接收电子邮件的 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件 属于 TCP IP 协议族中的一员 4 2 POP3 协议简析协议简析 POP3 协议采用 C S 工作模式 当客户机需要服务时 客户端的软件 例如 Outlook Express 等 将与远端的 POP3 服务器建立 TCP 连接 当客户端与远端建立了 TCP 连接以 后 客户端就与服务器之间进行数据交换 由于现在的服务器都需要用户提供用户名和 密码进行验证 如果验证不通过就会失去与服务器的连接 当验证通过以后 客户端就 可以利用 POP3 协议从服务器上读取邮箱内的信件 简单的说 POP3 就是一个简单而实 用的邮件信息传输协议 4 2 1 工作原理工作原理 在客户机与服务器进行 TCP 连接以后 POP3 客户向 POP3 服务器发送命令并等待响 应 POP3 命令采用命令行形式 用 ASCII 码表示 服务器响应是由一个单独的命令行 或多个命令行组成 响应第一行以 ASCII 文本 OK 或 ERR 指出相应的操作状态是成功还 是失败 在 POP3 协议中有 3 种状态 分别是认可状态 处理状态和更新状态 一般情况下 大多数现有的 POP3 客户与服务器执行采用 ASCII 明文发送用户名和口 令 在认可状态等待客户连接的情况下 客户发出连接 并由命令 user pass 对在网络上 发送明文用户名和口令给服务器进行身份确认 一旦确认成功 编撰如处理状态 注意 现在很多邮件服务器并不支持利用 POP3 协议读取信件 只能够以 Web 方式 登录进行邮件的接收和读取 姓名 贾志波 课题名称 简单电子邮件客户端的实现 16 4 2 2 POP3 协议的命令 应答协议的命令 应答及回话及回话 POP3 标准命令 USER 标识用户进行验证 PASS 发送密码进行验证 APOP 转换验证机制 QUIT 终止会话 NOOP 空操作 STAT 提供信箱大小信息 LIST 提供邮件大小信息 RETR 从服务器读取信件 TOP 读取信件的信头和前 N 行 DELE 标记邮件被删除 UIDL 取出邮件的唯一标识符 POP3 服务器的应答 在 POP3 中服务器的应答比 SMTP 应答简单的多哟 命令操作的应答状态码只有 OK 和 ERR 两个 分别表示成功和失败 POP3 回话的三种状态 POP3 会话一共有三个状态 验证状态 authorization status 事物状态 transaction status 更新状态 update status 每个状体都是会话中的特定阶段 当连接服务器后 首先进入验证状态 在这个阶段里 可以使用的 POP3 命令是 User Pass A pop Quit 通过服务器验证后 服务器锁定信箱这样做是为了防止多个 POP 客户端进行邮件操 作 比如删除 取信等 但可以让新的邮件加入 这时会话过程转变为事务多态 接收 邮件的 POP 对话大部分时间都是处于事务状态中的 在事物状态可以使用的 POP3 命令有 Noop Stat Quit List Retr Top Dele Rset Uidl 会话过程的最后一个状态为更新状态 在事物状态结束后 发出 Quit 命令进入该状 态 但是由于异常原因导致的与服务器终止对话冰没有进入更新状态 在事物状态进行 的一些操作最终在更新状态下才能得到体现 如删除邮件是在事物状态使用 Dele 命令 但是服务器冰没有实际删除 只是做了一个删除标志 则在事物状态删除的邮件没有被 姓名 贾志波 课题名称 简单电子邮件客户端的实现 17 删除 下次进入信箱时还能看见它 更新状态只是会话过程的一个过程 目的是用户在事物状态后用以确认已经进行的 才操作 该状态没有可使用的命令 在进入该状态后 紧接着就完成了 POP3 的会话过程 断开了与服务器的连接 发送信箱密码 这个命令是让客户端程序给服务器发送信箱密码的 语法 pass CString sCmd PASS 123321G n r CAsyncSocket Send sCmd sCmd Get Length 如果在这个过程中的密码与信箱不匹配 则不是简单地再发送一个 pass 命令 而必 须要重新进行发送信箱名的上一步骤 对信箱邮件进行操作 该阶段称为事物状态 在这个阶段 有许多 POP3 的命令可以使用 总接下来可以分为下面几类 取得信箱及邮件状态的命令 Stat 提供信箱大小信息 List 提供邮件大小信息 Uidl 取出邮件的唯一标识符 取得邮件内容的命令 Retr 从服务器取出邮件 Top 取出信头和邮件的前 N 行 对邮件进行操作的命令 Dele 标记邮件被删除 Rset 复位 POP 会话 接收邮件完毕 结束 POP3 对话 语法 QUIT CString sCmd QUIT n r CAsyncSocket Send sCmd sCmd GetLength 姓名 贾志波 课题名称 简单电子邮件客户端的实现 18 第第 5 章章 模块设计与测试模块设计与测试 5 1 JMail 组件的使用组件的使用 w3 JMail 是 Dimac 公司 推出的 ASP 发信组件 可以在 ASP Visual C Visual Basic Delphi 等开发工具中调用 和其他发送信件组件相比 它具有支持 HTML 多收件人 抄送 暗送等特点 jmail 是一种服务器端的邮件发送组件 和个人用的客户端邮件软件不一样的 jmail 是在服务器上给程序用来发邮件用的 除了软件编程人员 其他人一般平常用不上 jmail 是一个第三方邮件操作组件 通常位于 web 服务器端 和站点程序紧密配合来 接收及提交邮件到邮件服务器的控件 让网站拥有发送邮件既接收邮件的功能 与此相同的还有 CDONTS NewMail Persits MailSender IISmail Iismail 等等 他们唯一 区别就是 jmail 只需要注册一个 dll 组件即可被调用 而其他则需要在 iis 上设置发布 smtp 服务器 1 Body 信件正文 字符串 如 JMail Body 这里可以是用户填写的表单内容 可以取自 Form 2 Charset 字符集 缺省为 US ASCII 字符串 如 JMail Charset US ASCII 3 ContentTransferEncoding 字符串 指定内容传送时的编码方式 缺省是 Quoted Printable 如 JMail ContentTransferEncoding base64 4 Content Type 信件的 countertype 缺省是 text plain 字符串 如果你以 HTML 格式发送邮件 改为 text html 即可 如 JMail ContentType text html 5 Encoding 字符串 设置附件编码方式 缺省是 base64 可以选择使用的是 base64 uuencode or quoted printable 如 JMail Encoding base64 6 Log Jmail 创建的日志 前提 loging 属性设置为 true 见下面 字符串 如 使用 Response Write JMail Log 语句列出日志信息 7 Logging 是否使用日志 布尔型 如 JMail Logging true 姓名 贾志波 课题名称 简单电子邮件客户端的实现 19 8 Recipients 字符串 只读属性 返回所有收件人 如 Response Write JMail Recipients 9 ReplyTo 指定别的回信地址 字符串 如 JMail ReplyTo qiao198 10 Sender 发件人的邮件地址 字符串 如 JMail Sender qiao198 11 SenderName 发件人的姓名 字符串 如 JMail SenderName 一克 12 ServerAddress 邮件服务器的地址 字符串 你可以指定多个服务器 用分号点开 可以指定端口号 如果 serverAddress 保持空白 JMail 会尝试远程邮件服务器 然后直接发送到服务器 上去 如 JMail ServerAddress 13 Subject 设定邮件的标题 可以取自 Form 字符串 如 JMail Subject 客户反馈表单 14 添加文件附件到邮件 如 JMail AddAttachment c anyfile zip 15 AddCustomAttachment FileName Data 添加自定义附件 如 JMail AddCustomAttachment anyfile txt Contents of file 16 AddHeader Header Value 添加用户定义的信件标头 如 JMail AddHeader Originating IP 192 158 1 10 17 Add Recipient 收件人 字符串 如 JMail AddRecipient qiao198 18 AddRecipientBCC Email 密件收件人 如 JMail AddRecipientBCC qiao198 19 AddRecipientCC Email 抄送收件人 如 JMail AddRecipientCC 姓名 贾志波 课题名称 简单电子邮件客户端的实现 20 20 AddURLAttachment URL 文档名 下载并添加一个来自 url 的附件 第二个参数 文档名 用来指定信件收到后的文件名 如 JMail AddURLAttachment jmail 21 AppendBodyFromFile 文件名 将文件作为信件正文 如 JMail AppendBodyFromFile c anyfile txt 22 Append Text Text 追加信件的正文内容 比如增加问候语或者其它信息 如 JMail AppendText 欢迎访问本站 23 Close 强制 JMail 关闭缓冲的与邮件服务器的连接 如 JMail Close 24 Send 发送 调用格式 objJMail Send SMTPServerAddress Port 例 JMail Send Jmail 具有以下特点 1 可以发送附件 2 详细日志能力 便于你查看问题所在 3 设置邮件发送的优先级 4 支持多种格式的邮件发送 比如说以 HTML 或者 TXT 的方式发送邮件 这 是 个免费的组件 5 密件发送 CC 抄送 紧急信件发送能力 6 最关键的就是 免费的组件 不必花钱 所以非常值得使用 7 支持 PGP 加密邮件 通过上面的介绍 可以方便的进行收信和发信的工作 虽然在客户端软件中进行这 样的开发是不科学的 但显然它可以完成需求 同时还有一个很大的优点就是 JMail 拥有 免费版本 可以在其官方网站进行下载 虽然免费版本没有收费版本的功能强大 但是 满足需要是绰绰有余的 系统设计所用到的方法 即 Jmail 组件 5 2 系统窗体的组成系统窗体的组成 对于一个邮件的客户端系统来说 收信和发信时最基本的功能 同时也是最为重要 的功能 在本系统中 需要实现这两个功能 下面对整个系统的窗体组成进行介绍 系统采用基于对话框的应用程序框架 这是因为在对话框中可以方便地使用各种各 姓名 贾志波 课题名称 简单电子邮件客户端的实现 21 样的控件 满足用户的操作 同时可以对信件的发送 读写等提供各种操作 在本系统中 采用对话框的形式进行数据的显示等问题 为了使程序尽量的简单 只采用主对话框中进行参数设定和写信操作的方式 将收信的情况在另一个对话框中显 示 整个对话框上利用按钮控件实现用户的操作 利用编辑框 列表控件等来显示数据 等 由于整个系统主要是收信和发信两个功能 因此在对话框上只要利用两个按钮控件 进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能硬件更新合同:VR设备与AR眼镜
- 2025年低碳节能住宅项目买卖合同(附绿色建材使用承诺)
- 2025年度特色咖啡厅店面租赁合同(含咖啡制作技艺培训及品牌加盟)
- 2025年度智能电网变压器专业技术人员能力提升培训协议
- 2025年新能源汽车充电桩建设安全施工验收合同
- 合作产品保密协议
- 电梯安装工程公司员工保密合同
- 临床输血管理制度考核试题及答案
- 钢结构构件运输与吊装方案
- 风电项目风险评估与应对措施
- 水泥路施工安全知识培训课件
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- 2025年浙江省医疗器械专业技术资格考试(医疗器械专业知识与技能)历年参考题库含答案详解(5卷)
- 2025年云南警务辅助人员招聘考试(基本法律知识和公文写作)历年参考题库含答案详解(5卷)
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 2025年金融消费者权益保护考试题与答案
- 医院患者随访体系建设与实践
- 中学2025年秋季第一学期开学工作方案
- 新疆产假管理办法
- 《跨越百年的美丽》课件 中职语文上册
评论
0/150
提交评论