简单邮件收发系统的设计与实现
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
摘 要 内容来自think58 [版权所有:http://think58.com]
网络技术渐渐成熟,电子邮件技术也越来越成熟。现今,电子邮件(E-mail)是Internet上使用最为广泛的一种服务。
本论文设计并实现了一个电子邮件收发系统,该系统可以使用户更加方便的管理电子邮件,用户不用登陆网页,就可以收取和发送电子邮件。该系统主要分为三部分:用户设置、发送邮件和收取邮件。它采用C/S设计模式,服务器端是SMTP服务器和POP服务器,客户端是邮件收发程序。用户设置部分是注册用户,把用户信息存储起来。发送邮件部分是基于SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)与SMTP服务器进行对话。收取邮件部分是基于POP3(Post Office Protocol version 3,邮局协议)与POP服务器进行对话。电子邮件收发信息不只支持英文,而且支持中文。由于RFC882限制电子邮件的文本只能采用US ASCⅡ字符集,所以本系统采用MIME编码解码,扩展信件规范。最后,对该系统进行了测试。
论文分别从系统涉及的基础知识、系统的设计与实现和系统实现采用的关键技术进行详细说明。论文最后还对全文作出了总结。 think58.com [资料来源:http://THINK58.com]
关键词:信体结构,SMTP,POP3,MIME, 编码,解码
设计现状与发展情况
每一次上网收发邮件都要登陆邮件服务器,填写邮箱名称和密码,工作繁琐。利用桌面收发工具就可以不用上网下载网页内容,直接对邮件进行阅读和管理,并且可以把邮件保存到个人电脑中,方便翻阅。目前,已经有很多优秀的桌面邮件收发工具推出市场,如Foxmail、Outlook Express。Foxmail电子邮件客户端软件支持全部Internet 电子邮件功能,设计优秀、使用方便,提供全面而强大的邮件处理功能,运行效率高,赢得了广大用户的青睐。而Outlook Express具有同样的有点,是办公一族必不可少的通信工具。这些工具都集成了对邮件管理的强大功能,是用户能轻松方便的对电子邮件进行管理。现在,桌面邮件收发工具已经成为了人们工作和生活上进行交流必不可少的工具。
RFC的局限
RFC822作为电子邮件的文本格式标准,并没有提到非文本消息,如语音、图像等多媒体数据以及其它二进制数据文件[10]。而且RFC822限制电子邮件的文本只能采用US ASCⅡ字符集。随着电子邮件技术的发展,单纯是ASCⅡ字符的电子邮件已经满足不了国籍用户的需求。世界各地的人开始使用电子邮件。如果电子邮件不支持其它字符集,这就会成为一个严重的问题。试想一下,电子邮件不支持中文,你在收取邮件时,发现内容是一串一串的乱码,那是多么令人沮丧的事情。
[来源:http://www.think58.com]
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
本文来自think58
[资料来源:http://think58.com]
3. Content-Type:该字段解决除文本之外的数据格式的问题。包括7bit、8bit、binary、Base64、quoted-printable和x-uuencode。下面介绍一下Base64和quoted-printable。
4. Content-ID:该字段提供一种方法唯一标识MIME实体,与Message-ID唯一标识信件类似。
连接服务器
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服务器的响应码上面已提到,这里就不再重复了。 think58
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服务器连接通道,读取SMTP服务器的响应消息,验证登陆SMTP服务器[12]。
1.在连接服务器之前,先要分配好存储命令的缓存区response_buf,客户端发送的命令和服务器返回的响应消息,都会存储在这些缓存之中,用户需要读取数据时,就直接从缓存中读出。
2. 函数 CSMTP::get_response()定义了SMTP服务器返回的常用的消息。这里还定义了一个response_table数组,预先存储了常用的SMTP服务器响应码。把SMTP服务器接收的响应码与response_table数组的响应码进行比较,再做出判断。
think58.com [资料来源:http://THINK58.com]
[来源:http://think58.com]