简单邮件收发系统设计实现论文.doc_第1页
简单邮件收发系统设计实现论文.doc_第2页
简单邮件收发系统设计实现论文.doc_第3页
简单邮件收发系统设计实现论文.doc_第4页
简单邮件收发系统设计实现论文.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计毕业设计 论文论文 设计 论文 题目 简单邮件收发系统的设计与实现 学生姓名 专业班级 指导老师 系主任 院长 评 阅 人 年 5 月 23 日 毕业论文 第 I 页 简单邮件收发系统的设计与实现 摘 要 网络技术渐渐成熟 电子邮件技术也越来越成熟 现今 电子邮件 E mail 是 Internet 上使用最为广泛的一种服务 本论文设计并实现了一个电子邮件收发系统 该系统可以使用户更加方 便的管理电子邮件 用户不用登陆网页 就可以收取和发送电子邮件 该系 统主要分为三部分 用户设置 发送邮件和收取邮件 它采用 C S 设计模式 服务器端是 SMTP 服务器和 POP 服务器 客户端是邮件收发程序 用户设置 部分是注册用户 把用户信息存储起来 发送邮件部分是基于 SMTP Simple Mail Transfer Protocol 简单邮件传输协议 与 SMTP 服务器进行对话 收取邮件 部分是基于 POP3 Post Office Protocol version 3 邮局协议 与 POP 服务器进行 对话 电子邮件收发信息不只支持英文 而且支持中文 由于 RFC882 限制 电子邮件的文本只能采用 US ASC 字符集 所以本系统采用 MIME 编码解 码 扩展信件规范 最后 对该系统进行了测试 论文分别从系统涉及的基础知识 系统的设计与实现和系统实现采用的 关键技术进行详细说明 论文最后还对全文作出了总结 关键词关键词 信体结构 SMTP POP3 MIME 编码 解码 毕业论文 第 II 页 A Design and Implement of Simple Mail System Abstract Network technology is becoming more and more nature and E mail technology is developed fast Nowadays E mail has become a most used service on Internet The dissertation designs and implements a Simple Mail System The users can easily manage the E mail by using this system They can check and send E mail without landing website The system includes three main modules User setting E mail sending E mail checking It uses a C S architecture The server is a SMTP server or a POP server and the client is a sending and checking E mail tool The part of User setting is used to register users it storage the information in the local disk The part of E mail sending is communicating with the SMTP server by Simple Mail Transfer Protocol and the part of E mail checking is communicating with the POP server by Post Office Protocol The Simple Mail System support not only English but also Chinese Limited by RFC822 the text of E mail can only use ASC character set Thus this system makes use of MIME to encoding and decoding and expanding mail norms In the end I make a testing for the Simple Mail System The dissertation introduces the system from the following aspects the purpose of the design the design and the implement of the system the key technologies and so on Finally it makes a summary of the dissertation Key Words the structure of mail body SMTP POP3 MIME Encoding Decoding 毕业论文 第 III 页 目录 1绪论 1 1 1 课题的背景和来源 1 1 2 设计现状与发展情况 2 1 3 论文研究内容及组织形式 2 2E MAIL 基础 3 2 1 信件结构 3 2 1 1 RFC822 信件的格式与内容 3 2 1 1 1 信头 4 2 1 1 2 信件体 5 2 2SMTP 与 POP3 5 2 2 1SMTP 介绍 5 2 2 2POP3 介绍 7 2 3MIME 编码解码 8 2 3 1RFC 的局限 8 2 3 2Uuencode 编码与解码 9 2 3 3MIME 及其编码 9 2 3 4MIME 媒体类型 9 2 4小结 10 3系统的设计与实现 11 3 1用户设置功能 11 3 1 1设置用户信息 11 3 1 2测试连接 11 3 2发送邮件功能的设计与实现 12 3 2 1连接服务器 13 3 2 2发送命令及接受响应信息 13 3 2 3CSMTP 类的设计与实现 13 3 2 3 1 连接服务器 Connect 13 3 2 3 2 发送邮件 15 3 3收取邮件功能的设计与实现 16 3 3 1连接 POP3 服务器 17 3 3 2提取邮件内容 18 3 4系统测试 18 3 4 1用户设置功能测试 18 3 4 2发送邮件功能测试 19 3 4 3收取邮件功能测试 20 3 5小结 21 4系统实现所用到的关键技术 22 4 1BASE64 编码 22 4 2BASE64 解码 23 毕业论文 第 IV 页 4 3QUOTED PRINTABLE编码 23 4 4编码解码在程序中的应用 24 4 5小结 26 5结束语 27 5 1总结 27 5 2本阶段工作总结与下阶段工作展望 27 参考文献 28 致谢 29 毕业论文 第 1 页 1 绪论 1 1 课题的背景和来源 电子邮件翻译自英文的 Email 或 E mail 1 它表示通过电子通讯系统进行 信件的书写 发送和接收 今天使用的最多的通讯系统是因特网 同时电子 邮件也是因特网上作受欢迎的功能之一 通过电子邮件系统 你可以用最低 的成本 不管发送到哪里 都只需负担电话费和网费即可 快速地与世界上 任何一个角落的网络用户联络系 这些电子邮件可以是文字 图像 声音等 各种方式 正是由于电子邮件的使用简易 投递迅速 收费低廉 易于保存 全球畅通无阻 使得电子邮件被广泛地应用 2 它使人们的交流方式得到了极 大的改变 近年来 随着互联网技术的广泛应用和发展 电子邮件技术发展也日益 成熟 因为电子邮件拥有众多的优点 所以越来越多的人和公司把电子邮件 当作通信的主要手段 用户可以通过电子邮件的讨论会进行项目管理 并且 有时要根据快速 或不同地域的电子邮件信息交换进行重要的决策行动 但 无庸置疑的是 因特网扩展了其应用的范围 过去只能在其局域网上进行交 谈的公司现在可以通过网络与他们的客户 竞争伙伴和世界上的任何人进行 通信和交流 一旦某个组织的电子邮件系统运行在支持 TCP IP 3 协议的网络 上或具有支持两个因特网邮件服务协议 SMTP 4 简单邮件传输协议 和 POP 5 邮局协议 之一的互联网网关 它的邮件用户就能够连接到任何具有相似连 接的电子邮件地址上了 并且不论其电子邮件账户在何处 为了实际需要 许多人都会申请多个电子邮箱用于不同的方面 用户一般都先要登陆网页 然后输入用户名称和用户密码 最后是收发电子邮件 这个过程复杂繁琐 而且 用户不得不要记住多个电子邮箱的用户名称和密码 实在是一件麻烦 的事情 种种问题 又给用户带来很多不便 因此 要找出一个很好的方法 来解决这些问题 电子邮件收发系统就能够解决这些问题 简单邮件收发系 统是一款电子邮件客户端软件 提供基于 Internet 的电子邮件收发功能 同时 具有用户管理 邮件编辑功能 通过该系统 用户可以不用登陆到邮件服务 器 就可以收发电子邮件 前提是用户要正确设置用户名称和密码 这将会 毕业论文 第 2 页 极大地方便了用户来管理电子邮件 提高工作效率 现在用户各种邮箱数量在不断增加 过多的用户名 密码认证显得过于冗 余 登陆邮件服务器步骤繁琐 简单邮件收发系统可以给用户带了极大的方 面 可以不用亲自登陆电子邮件服务器 就可以轻松管理电子邮件 1 2 设计现状与发展情况 每一次上网收发邮件都要登陆邮件服务器 填写邮箱名称和密码 工作繁 琐 利用桌面收发工具就可以不用上网下载网页内容 直接对邮件进行阅读 和管理 并且可以把邮件保存到个人电脑中 方便翻阅 目前 已经有很多 优秀的桌面邮件收发工具推出市场 如 Foxmail Outlook Express Foxmail 电 子邮件客户端软件支持全部 Internet 电子邮件功能 设计优秀 使用方便 提供全面而强大的邮件处理功能 运行效率高 赢得了广大用户的青睐 而 Outlook Express 具有同样的有点 是办公一族必不可少的通信工具 这些工 具都集成了对邮件管理的强大功能 是用户能轻松方便的对电子邮件进行管 理 现在 桌面邮件收发工具已经成为了人们工作和生活上进行交流必不可 少的工具 1 3 论文研究内容及组织形式 论文全文共分五章 第一章 绪论 简要介绍本课题的背景来源及其研究发展状况 第二章 E mail 基础 简单地介绍了 E mail 的相关知识 包括 E mail 的 信体格式 SMTP POP3 和 MIME 编码解码 第三章 系统的设计与实现 详细介绍简单邮件收发系统的设计以及实 现的过程 第四章 系统实现用到的关键技术 详细介绍了编码与解码的原理 并 且阐述了该技术在系统中的应用 第五章 结束语 总结了系统开发工作并对未来的工作进行展望 毕业论文 第 3 页 2 E mailE mail基础基础 2 1 信件结构 2 1 1 RFC822 信件的格式与内容 书信是一种应用文 无论是介绍信 证明信 表扬信 还是朋友之间交 流的普通书信 都有其特定的格式 电子邮件虽然与我们平常所用的书信有 所区别 但是电子邮件的信体也有其规定的格式 我们要实现发送电子邮件 所以必须要了解电子邮件信体的结构 此外 在网络的各层中存在着许多协议 6 它是定义通过网络进行通信的 规则 接收方的发送方同层的协议必须一致 否则一方将无法识别另一方发 出的信息 以这种规则规定双方完成信息在计算机之间的传送过程 电子邮 件的核心协议是在在 1982 年发表的 RFC822 7 它也是 Internet E mail 信件的 当前标准 RFC822 指定电子邮件的信体数据必须是 ASC 码字符 RFC822 定义的消息格式由起始行 一个或多个头域 一个空行和可选的 消息体顺序构成 8 以下是一封电子邮件信件内容 Date Thu 17 May 2007 15 29 14 0800 From domo3696 Subject Test To domo3696 This is an E mail Do you know 从上面的结构简单的信件来看 信件内容主要包括 3 部分 消息头 Date Thu 17 May 2007 15 29 14 0800 From domo3696 Subject Test To domo3696 毕业论文 第 4 页 空白行 消息体 This is an E mail Do you know 信件结构总得来说分为两大部分 信头和信件体 2 1 1 1 信头 信头是电子邮件信体中相当重要的内容 结构比较复杂 它包含了关于 消息的信息 总的来说是由一些字段组成 每个信头字段由一行或多行文字 组成 对于跨多行的字段 附加以一个空格开始作为续行 每个信头字段由 以下部分组成 字段名称 可选的空格 一个冒号 可选的注释空格和一个 可选的字段体 RFC822 定义了 20 多个字段 7 包括 From 写信人 Sender 信件发 信人 Reply to 发送回复的地址 To 信件的主受信人 Cc 信件的辅 收信人 即抄信人 Bcc 信件的密件抄送人 Message ID 信件的唯一标 识符 In Reply To 所有的信件来源 Date 信件的创建日期 Received MTA 轨迹 Return Path 发信人地址 Subject 信件主题 Comments 关于信件的其它说明 Keywords 与该信件有关的主题关键字 Encrypted 加密信息 Resent 重新分发时创建的字段 X 扩展字段 在这些信头字段中 只有几个信头字段是必需的 而其它的可有可无 我们寄出一封信时 必须要写上收信人地址 而我们在写信的时候 就要签 上自己的名字和写信时间 唯有这样 收信人才会收到信件 才会知道是谁 写给他的 信什么时候写的 如出一辙 电子邮件的信件必须使用 Date 或 Resent Date 字段指定创建信件的日期 必须用 From 字段来指定写信人 还必 须指定一个收信人字段 可以是 To Cc 或者是 Bcc 除了发送信件中要求的 信头 处理信件的 MTA 必须在每个信头的开始增加一个 Received 字段 总的 毕业论文 第 5 页 来说 电子邮件的信头的格式是模仿了英文书信的信头格式 包括了写信日 期 写信人地址和收信人地址 2 1 1 2 信件体 信件体属于信笺的正文部分 相对于信头 信件就显得比较简单 在 RFC822 中 信件体是一系列的文本行 并没有附加的结构 信件体与信头之 间用空白行分开 2 2 SMTP 与 POP3 邮件从发送方发出到接收方收到邮件 一共经过四个过程 9 1 邮件从 客户端传输到 SMTP 服务器 2 邮件从 SMTP 服务器发送给 POP3 服务器 3 POP3 接收来自 SMTP 服务器的邮件 4 用户从 POP3 服务器收取邮件 收发邮件有一套会话标准 它们就是 SMPT 和 POP3 2 2 1 SMTP 介绍 SMTP Simple Mail Transfer Protocol 简单邮件传输协议 是一种提供 可靠且有效电子邮件传输的协议 它是基于 TCP 服务的应用层协议 它提供 一种邮件传送机制 当发信方与收信方在同一个网络上时 可以把邮件直接 传给对方 如果双方不在同一个网络时 它就要经过一个中转服务器转发 SMTP 规定了一系列命令 使用这些命令 客户端将与 SMTP 服务器进行会话 SMTP 命令如表 2 1 表表 2 1 SMTP 命令命令 SMTP 命令 命令功能 HELO客户端为标识自己的身份而发送的命令 通常带域名 EHLO使服务器可以表明自己支持扩展简单邮件传输协议 ESMTP 命令 MAIL FROM标识邮件的发件人 以 MAIL FROM 的形式使用 RCPT TO标识邮件的收件人 以 RCPT TO 的形式使用 毕业论文 第 6 页 续表续表 2 1 SMTP 命令命令 SMTP 命令 命令功能 TURN允许客户端和服务器交换角色 并在相反的方向发送邮件 而不必建立 新的连接 ATRN ATRN Authenticated TURN 命令可以选择将一个或多个域作为参 数 如果该会话已通过身份验证 则 ATRN 命令一定会被拒绝 SIZE提供一种使 SMTP 服务器可以指出所支持的最大邮件大小的机制 兼 容的服务器必须提供大小范围 以指出可以接受的最大邮件大小 客户 端发送的邮件不应大于服务器所指出的这一大小 ETRNSMTP 的扩展 SMTP 服务器可以发送 ETRN 以请求另一台服务器发 送它所拥有的任何电子邮件 PIPELINING提供发送命令流 而无需在每个命令之后都等待响应 的能力 CHUNKING替换 DATA 命令的 ESMTP 命令 该命令使 SMTP 主机不必持续 地扫描数据的末尾 它发送带参数的 BDAT 命令 该参数包含邮件的 总字节数 接收方服务器计算邮件的字节数 如果邮件大小等于 BDAT 命令发送的值时 则该服务器假定它收到了全部的邮件数据 DATA客户端发送的 用于启动邮件内容传输的命令 DSN启用传递状态通知的 ESMTP 命令 RSET使整个邮件的处理无效 并重置缓冲区 VRFY确认在邮件传递过程中可以使用邮箱 例如 vrfy ted 确认在本地服务 器上驻留 Ted 的邮箱 该命令在 Exchange 实现中默认关闭 HELP返回 SMTP 服务所支持的命令列表 毕业论文 第 7 页 QUIT终止会话 在客户端给 SMTP 服务器发送命令后 服务器都会给客户端返回一条响 应消息 10 响应都是以 3 位数字开头 加一个空格 然后是响应的描述信息 响应码每一给都有特定的含义 如表 2 2 表表 2 2 SMTP 响应码响应码 SMTP 响应码 含义 2xx肯定回答 3xx中间肯定回答 4xx暂时否定完成应答 5xx永久否定完成应答 x0 x语法错误 x1x 信息 x2x连接 x3x还未使用 x4x还未使用 x5x邮件系统 客户端接收到 SMTP 服务器的响应 根据响应码的内容分析下一步应该 要做什么 2 2 2 POP3 介绍 POP3 Post Office Protocol version 3 邮局协议 是一种允许用户从邮件服 毕业论文 第 8 页 务器收发邮件的协议 POP3 RFC1081 是在 1988 年发表的 它是基于 TCP 服务的应用层协议 与 SMTP 相似 POP3 也规定了一系列命令 使用这些命 令 客户端将与 POP 服务器进行会话 POP3 命令如表 2 3 表表 2 3 POP3 命令命令 POP3命令描述 USER用户名 PASS用户密码 STAT服务器上的邮件信息 RETR获取的信息数 DELE删除的信息数 LIST显示的信息数 TOP 从头开始 包含协议头 打印X行信息 QUIT退出POP3服务器 POP3 服务区接收客户端的请求 也会做出响应 它的响应是以 ASC 码 OK 或 ERR 开头的消息来支持客户端的操作是成功还是失败 2 3 MIME 编码解码 2 3 1 RFC 的局限 RFC822 作为电子邮件的文本格式标准 并没有提到非文本消息 如语音 图像等多媒体数据以及其它二进制数据文件 10 而且 RFC822 限制电子邮件 的文本只能采用 US ASC 字符集 随着电子邮件技术的发展 单纯是 ASC 字符的电子邮件已经满足不了国籍用户的需求 世界各地的人开始使 用电子邮件 如果电子邮件不支持其它字符集 这就会成为一个严重的问题 毕业论文 第 9 页 试想一下 电子邮件不支持中文 你在收取邮件时 发现内容是一串一串的 乱码 那是多么令人沮丧的事情 2 3 2 Uuencode 编码与解码 Uuencode 是将二进制数据编码成适合于电子邮件传送的文本格式 Uudecode 是相反的过程 把经过编码的文本译码成原来的二进制格式 Uuencode 技术是把 3 字节组映成为 4 个可打印的 US ASC 字符组 Uudecode 算法则相反 把 3 个字节组映射 4 个字节组的可打印字符 3 个字 节的 8 位 bit 转换到 4 个字节的 6 个 bit 2 3 3 MIME 及其编码 MIME Multipurpose Internet Mail Extensions 多用途英特网邮件扩展 是一种保证非 ASCII 码文件在 Internet 上传播的规格 MIME 扩展了 RFC822 规范 弥补了 RFC822 存在的缺陷 随着网络的飞速发展和电子邮件的广泛 应用 可以说 MIME 已经成为得到广泛支持的电子邮件的标准 MIME 对信头字段的扩展 MIME 对 RFC822 提供的字段进行了扩充 11 补充了一些信头字段 这 些字段通常是发送电子邮件程序在创建电子邮件时产生的 接收电子邮件程 序提供其中的字段得到有用的信息 1 MIME Version 该字段用于标识使用的 MIME 版本号 这是为了将来增加 版本号解决兼容性问题的 例如 MIME Version 1 0 2 Content Type 该字段是 MIME 中的主要字段 描述了特定的 MIME 实体包 含的数据 例如 Content Type text plain charset GB2312 3 Content Type 该字段解决除文本之外的数据格式的问题 包括 7bit 8bit binary Base64 quoted printable 和 x uuencode 下面介绍一 下 Base64 和 quoted printable 4 Content ID 该字段提供一种方法唯一标识 MIME 实体 与 Message ID 唯 一标识信件类似 毕业论文 第 10 页 2 3 4 MIME 媒体类型 Content Type 是用于在信头指定媒体类型的字段 它是 MIME 对 RFC822 扩展的最主要信头字段 包含着很丰富的信息 在 RFC2045 中定义了 8 个顶 层的媒体类型 text image audio video application message 和 multipart 2 4 小结 电子邮件有其规范的格式 要符合这个规范 邮件服务器才允许电子邮 件进行传输 RFC822 定义了电子邮件的格式 包括信头和信件体 然而 RFC822 却限制了邮件内容只能是 ASC 字符集 MIME 扩展了 RFC822 规范 弥补了 RFC822 存在的缺陷 MIME 已经成为得到广泛支持的电子邮件的标准 毕业论文 第 11 页 3 系统的设计与实现 3 1 用户设置功能 为了用户省去每次收发邮件都要输入用户名称和密码的麻烦事情 用户只 要在第一次正确填写好自己邮箱的相关信息 就可以方便地收发电子邮件 提高用户的收发邮件的速度 方便用户操作邮箱 是本系统的最终目的 所 以 用户设置这个模块显然不是最重要的 但是这是最有意义的 3 1 1 设置用户信息 设置用户信息这部分比较简单 采用读写系统文件的办法来写入和读取用 户信息 如下图 3 1 图 3 1 用户信息设计示意图 用户只要填写好邮箱地址和用户密码 程序就会自动分析用户名称 SMTP 服务器和 POP 服务器 把所有信息写到 Config ini 文件中 方便以后读取相 关的信息 3 1 2 测试连接 用户设置完邮箱信息后 就可以测试连接邮件服务器 验证该邮箱是否可 用 测试连接用到了 BOOL CSMTP Connect CString pUsername CString pPassword 函数 这个函数将在下一小节介绍 无论连接是否成功 都会返回 一个提示 通知用户 毕业论文 第 12 页 3 2 发送邮件功能的设计与实现 SMTP 模式采用的是现在最流行的 C S 客户机 服务器端 模式 针对用 户的邮件请求 发送 SMTP 建立与接收 SMTP 之间建立一个双向传送通道 6 接收 SMTP 可以是最终接收者也可以是中间传送者 SMTP 命令由发送 SMTP 发出 由接收 SMTP 接收 而应答则反方面传送 如图 3 2 图 3 2 SMTP 通讯模式图 根据 SMTP 通讯模式图 我们就可以比较概括地看到 SMTP 是如何通讯 的 为了更加清晰地了解发送邮件的整个流程 我们将给出发送邮件的流程 图并且对它进行分析 发送邮件的流程如图 3 3 图 3 3 发送邮件流程图 毕业论文 第 13 页 3 2 1 连接服务器 E mail 的通信过程是基于 TCP IP 协议的 6 所以在 Winsock 就可以达到 和服务器进行通信的目的 里有 Winsock 进行 TCP 通信 对话 包含一下几 个步骤 1 设置服务器在指定 IP 端口监听客户端的连接请求 2 客户端连接到指定的 IP 地址和端口的服务器 3 服务器通过接受连接响应连接请求 4 客户端和服务器向对方发送数据 5 关闭客户端和服务器之间的连接 我们编写这个发送邮件的客户端 要与 SMTP 服务器通信 只要设置 Winsock 连接的 IP 地址或者域名 指定端口就可以了 SMPT 服务器的端口 一般为 25 3 2 2 发送命令及接受响应信息 上一章节已经提到 客户端与 SMTP 服务器进行会话 就要用到 SMTP 协议的一整套的会话的标准命令 在每发送一条 SMTP 命令后 服务器给客 户机返回一条响应 服务器与客户端之间一应一答 进行会话 SMTP 协议的 会话命令和 SMTP 服务器的响应码上面已提到 这里就不再重复了 3 2 3 CSMTP 类的设计与实现 CSMTP 类的主要功能是实现客户端与 SMTP 服务器的连接 并且进行会 话 CSMTP 类包括 BOOL Connect CString pUsername CString pPassword BOOL Disconnect virtual BOOL FormatMailMessage CMailMessage msg BOOL SendMessage CMailMessage msg CString GetLastError 等函数 3 2 3 1 连接服务器 Connect 为了建立与 SMTP 服务器的连接 我们建立一个函数 CCMTP Connect 该函数做了几个步骤 建立缓存区 发送 HELO 打开与 SMTP 服务器连接通 毕业论文 第 14 页 道 读取 SMTP 服务器的响应消息 验证登陆 SMTP 服务器 12 1 在连接服务器之前 先要分配好存储命令的缓存区 response buf 客户 端发送的命令和服务器返回的响应消息 都会存储在这些缓存之中 用户需 要读取数据时 就直接从缓存中读出 2 函数 CSMTP get response 定义了 SMTP 服务器返回的常用的消息 这里还定义了一个 response table 数组 预先存储了常用的 SMTP 服务器响应 码 把 SMTP 服务器接收的响应码与 response table 数组的响应码进行比较 再做出判断 伪代码如下 IF not receive SMTP server message THEN show the message Socket ERR Reed the message from buffer Extract the first three numbers from the message Judge the number and see it is right or error IF right THEN return TRUE ELSE return FALSE 3 CSocket 类的函数 CSockt Create 创建一个套接字 如果套接字创建成 功 那么调用函数 CSocket Connect 向 SMTP 服务器请求连接 并调用函数 CSMTP get response 读取 SMTP 服务器的响应消息 4 如果套接字成功连接 SMTP 服务器 下一步就要登陆 SMTP 服务器 13 以前的大多数 SMTP 服务器不用用户授权登陆 就可以直接让用户发送电子 邮件 但是 现在已经不同了 大部分 SMTP 服务器都要求用户进行服务器 授权登陆 所以 在程序里有必要进行这个步骤 SMTP 服务器授权登陆是件 麻烦的事情 首先 客户端需要把编码的用户名称发送到 SMTP 邮件服务器 等 SMTP 服务器返回正确的消息 客户端就可以执行下一步 把编码的密码 发送过去 如果 SMTP 服务器返回正确的响应 那就表示授权登陆已经通过 了 连接登陆 SMTP 服务器的伪代码如下 IF failed to create socket THEN exit IF failed to connect SMTP server THEN exit Encode the user name and password IF failed to accepted the user name THEN exit IF failed to accept the password THEN exit 毕业论文 第 15 页 3 2 3 2 发送邮件 1 塑造邮件格式 上一章节已经提到 邮件有特定的格式 而信头与信件体的格式又各不相 同 所以在发送邮件之前 要先对邮件内容进行格式 在这里建立一个 CMailMessage 类 并定义函数 FormatMessage 函数 CMailMessage FormatMessage 分别对邮件的信头和信件体内容进行符 合邮件的格式化 举个例子 信头 From domo3696 To Date Mon 21 May 07 23 43 08 中国标准时间 Subject sdfasdf MIME Version 1 0 Content Type multipart mixed boundary WC MAIL PaRt BoUnDaRy 05151998 信件体 Part 173222 25412629 1179603381649 Content Type text plain charset gbk Content Transfer Encoding base64 z9bU2srHsbG qcqxvOQgIA Part 173222 25412629 1179603381649 Content Type text html charset gbk Content Transfer Encodin 2 发送邮件 在 CSMTP 类编写函数 transimit message 来完成发送邮件的任务 发送 邮件要有一定的顺序格式化发件人 E Mail 地址 格式化收件人 E Mail 地址 毕业论文 第 16 页 发送 DATA 指令 格式化邮件头部 格式化邮件正文 发送作为邮件结束标 志的符号 没发送一个内容 都要读出 SMTP 服务器的响应消息 以判断此 过程是否出错 伪代码如下 Send then message MAIL FROM IF failed to accept THEN exit Send then message REPT TO IF failed to accept THEN exit Send then message DATA IF failed to accept THEN exit 3 关闭连接 在发送完邮件时 为了避免资源泄露 要关闭连接 调用 CSMTP 类 Disconnect 函数可以断开与 SMTP 服务器的连接 CSMTP Disconnect 先把 QUIT 命令发送给 SMTP 服务器请求终止会话 然后把缓存区的清空 以防内存泄 漏 3 3 收取邮件功能的设计与实现 POP3 是它的第三个版本 是规定了怎样将个人计算机连接到 Internet 的 邮件服务器和下载电子邮件的电子协议 14 它是 Internet 电子邮件的第一个 离线协议标准 简单点说 POP3 就是一个简单而实用的邮件信息传输协议 邮件发送到服务器上 电子邮件客户端调用邮件客户机程序以连接服务器 并下载所有未阅读的电子邮件 这种离线访问模式是一种存储转发服务 将 邮件从邮件服务器端送到个人终端机器上 一般是 PC 机或 MAC 一旦邮 件发送到 PC 机或 MAC 上 邮件服务器上的邮件将会被删除 客户端从 POP3 收取服务器收取邮件的过程如图 3 4 毕业论文 第 17 页 图 3 4 收取邮件流程图 3 3 1 连接 POP3 服务器 POP3 通信与 SMTP 的差不多 与 POP3 服务器进行的客户端程序 设置 Winsock 连接的 IP 地址或域名 指定端口号 POP3 的端口号为 110 10 1 创建连接 在 POP3 类建立一个 Connect 函数 首先调用 CSocket 类的函数 CSockt Create 创建一个套接字 如果套接字创建成功 那么调用函数 CSocket Connect 向 POP3 服务器请求连接 并调用函数 CPOP3 get response 读取 POP3 服务器的响应消息 2 发送用户邮箱名称 让客户端给服务器发送用户信箱名是必须的 因为只有登陆了服务器 才 能操作邮箱 先把要发送的内容格式化成 POP3 标准命令 例如 sUser Format USER s r n GetUsername 结果是 sUser USER GetUsername r n 然后发送到服务器上 如果对话成功 服务器会返回 OK 如果失败 则返回 ERR 3 发送信箱密码 用户信箱名发送成功之后 还要发送密码 先把要发送的内容格式化成 POP3 标准命令 例如 sPassword Format USER s r n GetPassword 结 果是 sPassword Password GetPassword r n 然后发送到服务器上 如果 毕业论文 第 18 页 对话成功 服务器会返回 OK 如果失败 则返回 ERR 4 对信箱邮件进行操作 在 POP3 类里建立一个 GetMessage 函数 格式化取邮件命令 把命令发 送到 POP3 服务器端 如果对话成功 那就可以调用 CSocket Receive 函数 把邮件一封一封的取过来 然后存到缓存中 当用户需要查看邮件时候 可 以缓存中提出来 当然 最好的方法就是把邮件存到本地磁盘 用户想查看 邮件时 就可以从本地读取 省去了再一次登陆服务器来取邮件的麻烦 而 本系统就是采用了把邮件存储到本地的策略 5 断开连接 在收取完邮件时 为了避免资源泄露 要关闭连接 调用 CPOP3 类 Disconnect 函数可以断开与 POP3 服务器的连接 CPOP3 Disconnect 先把 QUIT 命令发送给 SMTP 服务器请求终止会话 然后把缓存区的清空 以防内 存泄漏 3 3 2 提取邮件内容 因为从 POP3 服务器传送到客户端的信息都是经过编码的 所以要经过解 码才能读取用户想要的信息 而且 邮件的内容是经过 MIME 扩展的 除了信 头和信件体的信息 还有一些其它信息 如 MIME Version Content Type 等 用户对这些信息不感兴趣 所以我们在给译码解码之前 要先提取要用户想 要的信息 然后进行解码 解码后所得到的信息就是用户想要的信息 这个 过程繁琐复杂 提取信息时要根据信息的特征进行提取 至于对信息的解码 在下一章会有详细的介绍 3 4 系统测试 在系统开发完后 为了尽可能找出错误 于是对系统进行简单的测试 3 4 1 用户设置功能测试 功能描述 程序根据邮箱地址和密码 自动生成 SMTP 服务器地址和 POP3 服务器地址 并把信息存储到本地 毕业论文 第 19 页 测试步骤 填写邮箱地址和密码 并按下应用键 测试结果 SMTP 服务器地址和 POP3 服务器地址信息可以自动生成并存 到本地 但是程序界面的信息没有马上刷新显示出来 如图 3 5 存储文件的 内有没有经过加密 容易泄漏用户信息 如图 3 6 图 3 5 用户配置界面 图 3 6 配置文件内容 3 4 2 发送邮件功能测试 功能描述 能够成功发送电子邮件 测试步骤 填写收信人地址 主题和内容 点击发送 测试结果 可以成功发送邮件 如图 3 7 图 3 8 但是支持附件功能还没 有添加上去 毕业论文 第 20 页 图 3 7 发送邮件 图 3 8 网站上查看邮件 3 4 3 收取邮件功能测试 功能描述 能够成功从 POP3 服务器上收取电子邮件 测试步骤 直接收取按键 测试结果 可以成功收取邮件 如图 3 9 图 3 10 但是支持附件功能还 没有添加上去 毕业论文 第 21 页 图 3 9 服务器上邮件列表 图 3 10 存储到本地的邮件信息 3 5 小结 收发 E mail 与 SMTP 和 POP3 两个协议息息相关 因此 有必要从这两 个协议开始了解收发 E mail 的原理及过程 在本系统的开发过程中 用到了 很多底层的知识 尽管系统的功能不是太完善 作者本人都从此过程中学到 很多网络知识 积累大量开发经验 毕业论文 第 22 页 4 系统实现所用到的关键技术 在 Internet 里 E mail 的传送是只能传送 US ASCII 格式的文字信息 ASCII 是 7 位的 而非 ASCII 格式的档案 在传送过程中若不先经过编码 先编成 7 位再传送 则在传送过程中会因为这 7 位元的限制而遭到拆解 拆 解之后只会让收信方看到一堆乱七八糟不知所云的东西 15 经过编码后的资 料 在传送过程中才可顺利传送 不会有 被截掉一个 bit 的危险 但是收 信方必须具有解码程序 将这份经过编码的东西还原 才能解读 天书 看 到寄信人要传送的真实信息 本系统中 用到了编码解码的知识 在这里 先介绍一下有关编码解码 的知识 本文主要介绍两种常用的编码解码方法 Base64 和 Quoted Printable 4 1 Base64 编码 Base64 的编码方式类似与 Uuencode 6 首先 从编码的数据中每次一次 取出三个字节的数据作为一组 并把它们转换成四个 6 位 2 的二进制数字 这四个数字也是分别用字节来表示 每个字节的前两位都为 0 这样转换后的 四个字节的值范围限制在 0 64 之间 这一不是与 Uuencode 一样的 第二步 是按编码字符表将数值转换成对应的 ASC 字符 之所以选择这些字符因为 它们经过电子邮件网关时不会被破坏 这两步对要编码的数据字节序列重复 进行 知道所有的数据编码完成为止 编码表如表 4 1 表表 4 1 编码字符表编码字符表 值 字符值 字符值 字符值 字符值 字符值 字符值 字符值 字符 0 A8 I16 Q24 Y32 g40 o48 w56 4 1 B9 J17 R25 Z33 h41 p49 x57 5 2 C10 K18 S26 a34 i42 q50 y58 6 3 D11 L19 T27 b35 j43 r51 z59 7 4 E12 M20 U28 c36 k44 s52 060 8 5 F13 N21 V29 d37 l45 t53 161 9 6 G14 O22 W30 e38 m46 u54 262 毕业论文 第 23 页 7 H15 P31 f39 n47 v55 363 注意 1 关于编码后的文本每行的长度 邮件信件内容的文本行应该控制在 76 个字符以内 所以编码时要注意 如果每行经过编码的文本控制在 76 个字符以内 那么超过的需要插入 Crlf 回 车换行 插入的 Crlf 不需要经过编码 而原来的要编码的数据中可能有 CR 0A 和 LF 0D 则与其他字符一样需要编码的 在译码时将碰到的 Crlf 删除即可 2 填充字符 编码由于时采用三个作为一组进行的 如果被编码的数据长度不是 3 的 整数倍 则编码的最后一组不是完整的 3 字节组 就有可能剩下 1 个或者 2 个字节 当剩余 1 个字节时 最佳两个 0 值来产生 3 个字节组 产生的 4 个编码 数据只有前两个带有剩余的那个字节的位 所以编码后后两个字节设置为 字符 4 2 Base64 解码 Base64 解码就是把译码还原成原码 是编码的逆转过程 这里就不多说 了 4 3 Quoted Printable 编码 1 Quoted Printable 编码算法有 5 条规则组成 被编码的数据以 8bit 的字节为单位 每个字节都可以用等号 与相应的十 六进制形式来表示 如值 12 被编码为 0C 十六进制数据的表示用字母表 0 1 2 3 4 5 6 7 8 9 A B C D E F 即必须用大写字母 除了符合一下 4 条规 则的数据外 其余数据都必须按这种方法编码 2 如果被编码数据的值在 33 字符 到 60 字符 到 126 字符 之间 则该数据可用其对应的 ASC 字符来表示 这部分字 毕业论文 第 24 页 符是可打印的 编码后的数据即为 7bit 的 ASC 码 3 数据 9 和 32 对应的 ASC 码字符为制表符 tab 和空格 space Tab 和 space 必须按规则 1 编码 对于一个编码行末尾的 space 和 tab 不同的邮件传 输系统的处理方法是不同的 有的系统在编码行末尾增加一些空格 有的系 统在编码行末尾的空格都删除掉 4 编码行的结束用回车符 CR 和换行符 LF 表示 Quoted Printable 编码允 许回车符和换行符单独出现 也可以 LFCR 和 CRLF 的顺序相邻出现 回车 符被编码为 0D 换行符被编码为 0A 5 规则 4 的编码行是指所含字符少于 1000 的 适用于 SMTP 传输协议的 编码行 而 Quoted Printable 编码要求次编码行别分隔成若干段 每段不超过 76 个字符 这种行分隔符要用等号 表示 此等号也被包含在 76 个字符 中 4 4 编码解码在程序中的应用 如果要发送的邮件内容包含非 US ASC 码字符 那就要用到 MIME 编 码 其实 在服务器授权登陆的时候 就会用到 Base64 的编码 先要将邮箱 用户名进行 Base64 编码 然后就编码后的内容发送到 SMTP 服务器 等等到 正确响应后 程序又要将用户密码进行编译 然后把编码后的内容发送到 SMTP 服务器 在这里 可以不用 Base64 编码 可以用其它的编码方式对用 户名和用户密码进行编码 还有 从 POP3 传送到客户端的邮件的内容 大部分都是经过编码的 所 以如果没有对邮件内容经过解码就支持查看内容 就会看待一串串译码 这 不是用户想看到的 所以 在显示给用户之前必须要把这些信息进行解码 图 4 1 图 4 2 图 4 3 和图 4 4 分别显示了从 POP3 收取的原数据 毕业论文 第 25 页 图 4 1 7bit 编码源码图 图 4 2 8bit 编码源码图 图 4 3 base64 编码源码图 毕业论文 第 26 页 图 4 4 quoted printable 编码源码图 从上面的四个不同的信件体内容可以看出 由于从 POP3 服务器上接收回 来的信息的编码方式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论