成员负责模块李进(组长)邮件服务器管理模块、邮件管理之邮件发送模块,其他模块有参与马昌修改用户信息模块,其他模块有参与高宁邮件管理模块(重要)何骥越登录模块王贺注册模块网络邮件系统电子邮件作为Internet最为广泛的应用之一,在人们的工作和生活中扮演着重要的角色,应用的普及使电子邮件技术有了飞速的发展。网络电子邮件系统在当今的互联网上比比皆是,不管是windows上的普及,还linux上的稳定可靠和低廉;不管是分布式系统,还是基于P2P,都离不开邮件系统的基本原理。邮件传输原理在Internet上将一段文本信息从一台计算机传送到另一台计算机上,可通过两种协议来完成,即SMTP(SimpleMailTransferProtocol,简单邮件传输协议)和POP3(PostOfficeProtocol,邮局协议3)。SMTP是Internet协议集中的邮件标准。在Internet上能够接收电子邮件的服务器都有SMTP。电子邮件在发送前,发件方的SMTP服务器与接收方的SMTP服务器联系,确认接收方准备好了,则开始邮件传递;若没有准备好,发送服务器便会等待,并在一段时间后继续与接收方邮件服务器联系。这种方式在Internet上称为“存储——转发”方式。POP3可允许E-mail客户向某一SMTP服务器发送电子邮件,另外,也可以接收来自SMTP服务器的电子邮件。换句话说,电子邮件在客户PC机与服务提供商之间的传递是通过P0P3来完成的,而电子邮件在Internet上的传递则是通过SMTP来实现。如图所示:注:服务器A是发送邮件服务器(SMTP),服务器B是接收邮件服务器(POP3/IMAP)1.电子邮件的发送和接收电子邮件在Internet上发送和接收的原理可以很形象地用我们日常生活中邮寄包裹来形容:当我们要寄一个包裹的时候,我们首先要找到任何一个有这项业务的邮局,在填写完收件人姓名、地址等等之后包裹就寄出而到了收件人所在地的邮局,那么对方取包裹的时候就必须发送主机服务器B服务器A客户SMTPPOPInternet去这个邮局才能取出。同样的,当我们发送电子邮件的时候,这封邮件是由邮件发送服务器(任何一个都可以)发出,并根据收信人的地址判断对方的邮件接收服务器而将这封信发送到该服务器上,收信人要收取邮件也只能访问这个服务器才能够完成。2.电子邮件地址的构成电子邮件地址的格式是“USER@SERVER.COM”,由三部分组成。第一部分“USER”代表用户信箱的帐号,对于同一个邮件接收服务器来说,这个帐号必须是唯一的;第二部分“@”是分隔符;第三部分“SERVER.COM”是用户信箱的邮件接收服务器域名,用以标志其所在的位置。3.电子邮件的工作原理电子邮件与普通邮件有类似的地方,发信者注明收件人的姓名与地址(即邮件地址),发送方服务器把邮件传到收件方服务器,收件方服务器再把邮件发到收件人的邮箱中。更进一步的解释涉及到以下几个概念:MUA--MailUserAgent,邮件用户代理,帮助用户读写邮件;MTA--MailTransportAgent,邮件传输代理,负责把邮件由一个服务器传到另一个服务器或邮件投递代理;MDA--MailDeliveryAgent,邮件投递代理,把邮件放到用户的邮箱里。整个邮件传输过程如下:目前使用的SMTP协议是存储转发协议,意味着它允许邮件通过一系列的服务器发送到最终目的地。服务器在一个队列中存储到达的邮件,等待发送到下一个目的地。下一个目的地可以是本地用户,或者是另一个邮件服务器。如果下游的服务器暂时不可用,MTA就暂时在队列中保存信件,并在以后尝试发送。关于邮件系统的其他一些技术,我们暂且不考虑。如下所示:邮件服务器提供了邮件系统的基本结构,包括邮件传输、邮件分发、邮件存储等功能,以确保邮件能够发送到Internet网络中的任意地方。目前邮件服务器有两种不同的应用群体:ISP提供商和企事业单位。Web邮件技术,使邮件用户可以在任何地方使用浏览器登录邮件服务器收发邮件,而不用配置邮件客户端程序。多域邮件服务是一台物理服务器为多个独立注册Internet域名的企业或单位提供电子邮件的服务,在逻辑上,这些企业和单位拥有自己独立的邮件服务器(企业邮局),也可以称为虚拟邮件服务器技术。对于ISP提供商和企业集团公司来说,多域邮件服务器的支持能力是选择邮件服务器的一个重要考虑因素。它可以方便地扩展其横向邮件服务能力。使用Linux作为邮件服务器,可以与Sendmail、MySQL等开源软件共同使用,在满足用户需求的基础上降低了系统价格。邮件服务器的安全防护,包括数据身份认证、传输加密、垃圾邮件过滤、邮件病毒过滤、安全审计等的多项安全技术。身份认证主要指SMTP发信认证,此项功能对于邮件服务器是一个可选功能,主要目的是防止黑客利用自己的服务器攻击其他邮件服务器。完善SMTP身份认证不仅可以制止黑客的恶劣行为,同时可以保证自己的邮件服务器的各种资源可以充分地应用到日常的邮件处理过程中,不会造成服务器的系统崩溃和资源浪费。无论是POP3协议还是SMTP协议,由于其在设计之初的缺陷,全部使用明码进行消息的传递,因此很容易造成信息的泄漏。可以通过两种方式提高系统的安全性:链路加密和端对端加密。链路加密是使用加密工具(软硬件工具)对传输的线路进行数据加密,需要网络设施的支持。端对端加密是邮件客户端到邮件客户端的加密,是邮件服务器应当提供的功能,目前较为流行的方式是使用SSL/TLS进行传输加密。垃圾邮件大多是一些带有商业性质的广告等宣传品。据估计,仅仅商业性垃圾邮件一项,每封垃圾邮件所抵消的生产力成本就在1美元左右。单是下载垃圾邮件所花费的上网费与电话费,每年就要花掉全球网民94亿美元。此外,许多病毒以及身份证和信用卡盗用案例也与垃圾邮件有关。因此,需要邮件服务器具有垃圾邮件处理的功能,抵御大部分垃圾邮件的攻击。黑客攻击和病毒本来是两个相对独立的技术体系,但是随着网络的不断发展,网络工具与病毒越来越趋于融合,比如尼姆达病毒既是病毒,也是网络攻击的一种方式,而应用广泛的电子邮件,也成了病毒传播的主要方式之一。目前,大多数邮件服务器都具有了基本的病毒防护的能力。目前的邮件服务器,仅中文就有若干字符集,如GB-2312、Big5等等,虽然我们可以统一标准,但是,在实际的过程中,我们不可能统一所有的邮件客户端,因此我们只能要求邮件服务器支持多语言的环境。由于目前许多邮件服务器处于电信托管等方式(服务器托管、服务器租用),不可能经常进行本地操作,因此目前邮件服务器均提供了远程邮件监控的功能。可以通过Web方式,监控邮件服务器的工作状态,包括在线用户数、邮件处理数量和速度、存储空间使用率等,并且可以随时对出现的发信高峰和网络攻击进行远程处理。电子邮件系统应该具备无限的扩展能力,Internet网络的一个特性是变化无常,需要应对随时而来的应用尖峰。因此,需要电子邮件系统具有无限的可扩展能力,这个能力主要体现在邮件的处理能力和邮件的存储能力上。为了能够使邮件的处理能力可以无限扩展,就需要引入集群和负载均衡技术,使应用平台可以在需要的时候无限扩充,满足长期或临时的业务需要。对于2000万以上的邮件用户来说,每天发送的邮件量至少在几千万封,为了便于邮件存储,需要高性能的邮件存储解决方案,最为理想的应该是SAN技术在邮件服务器领域的应用。常见邮件协议:SMTP(SimpleMailTransferProtocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。POP(PostOfficeProtocol):目前的版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。IMAP(InternetMessageAccessProtocol):目前的版本为IMAP4,是POP3的一种替代协议,提供了邮件检索和邮件处理的新功能,这样用户可以完全不必下载邮件正文就可以看到邮件的标题摘要,从邮件客户端软件就可以对服务器上的邮件和文件夹目录等进行操作。IMAP协议增强了电子邮件的灵活性,同时也减少了垃圾邮件对本地系统的直接危害,同时相对节省了用户察看电子邮件的时间。除此之外,IMAP协议可以记忆用户在脱机状态下对邮件的操作(例如移动邮件,删除邮件等)在下一次打开网络连接的时候会自动执行。本系统主要从简单的邮件客户端来探讨一个邮件系统。利用JavaMail来实现。以下是关于JavaMail的一些基本知识:JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于MicrosoftOutlook的应用程序。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(JavaDevelopmentKit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeansActivationFramework(JAF)。JavaBeansActivationFramework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。JavaMail是可选包,因此如果需要使用的话你需要首先从java.sun.com下载。目前最新版本是JavaMail1.4,使用JavaMail的时候需要JavabeanActivationFramework的支持,因此你也需要下载JAF。安装JavaMail只是需要把他们加入到CLASSPATH中去,如果你不想修改CLASSPATH的话,可以直接把他们的jar包直接copy到JAVA_HOME/lib/ext下。这样JavaMail就安装好了。JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。Javax.mail.Session:Session类定义了一个基本邮件会话(session),是JavaMailAPI最高层入口类。所有其它类都是经由这个session才得以生效。Session对象用Java.util.Properties对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。Javax.mail.Message:一旦获得Session对象,就可以继续创建要发送的消息。这由Message类来完成。因为Message是个抽象类,必需用一个子类,多数情况下为Javax.mail.internet.MimeMessage。MimeMessage是个能理解MIME类型和头的电子邮件消息,正如不同RFC中所定义的。虽然在某些头部域非ASCII字符也能被译码,但Message头只能被限制为用US-ASCII字符。Javax.mail.Address:一旦您创建了Session和Message,并将内容填入消息后,就可以用Address确定信件地址了。和Message一样,Address也是个抽象类。您用的是Javax.mail.internet.InternetAddress类。Javax.mail.Authenticator:与Java.net类一样,JavaMailAPI也可以利用Authenticator通过用户名和密码访问受保护的资源。对于JavaMailAPI来说,这些资源就是邮件服务器。JavaMailAuthenticator在Javax.mail包中,而且它和Java.net中同名的类Authenticator不同。两者并不共享同一个Authenticator,因为JavaMailAPI用于Java1.1,它没有Java.net类别。要使用Au