如何使用JSP开发WebMail系统

js|web

电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail等)与提供邮件服务的服务器(如163.net、263.net、371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。WebMail是目前Internet上最受欢迎的服务之一,也是很多网站必备功能之一。另外WebMail同样也适用于企业或校园网的应用。

通常在后台服务器的搭建和设置完成后实现WebMail系统,而前台的开发工作主要是开发工具与后台数据库和邮件服务器的交互问题。在Linux平台上运行的各种服务器软件稳定性和可靠性一直很好,而且选择跨平台的Java开发工具使系统更稳定,具有更高的伸缩性。

JSP性能

尽管JSP提供强大的功能是建立在Servlet之上,但JSP的性能和Servlet相差无几。JSP首先要编译成Servlet,这只会增加少量的代码,仅需编译一次且可以预编译,这就消除了运行时花费不必要的负担。JSP与Servlet性能上的差异仅仅表现在返回的数据是二进制的。这是因为JSP返回时用的是PrintWriter,而Servlet可以应用于速度更快的OutputStream。

JSP自定义的标签库可以封装大量的、复杂的Java操作在一个Form里面,这些预先定义好的标签可以很容易的被那些没有Java知识的人调用。因此,JSP自定义的标签库可以有效地实现Java程序员和Web设计人员工作的划分。然而,在页面上应用的每一个标签,Web容器都必须创建一个新的标签句柄对象或从标签缓冲中提取它。因此,过多的应用自定义的标签将会带来不必要的资源浪费。

BodyTags是一种特殊的定制标签,可以提取在它之间封装的内容或者替换那些内容。BodyTags之间的内容一般会备份在内存中。由于BodyTags之间能够嵌套和重复,因此,在程序中应用了多级的BodyTags会占用大量宝贵的内存和系统资源。

实现WebMail的主要功能

该系统提供了获取、阅读、书写、转发、回复、打印、删除及用户管理的功能。考虑到系统的跨平台性,采用Java及相关技术产品为开发工具,特别是采用JSP作为服务程序,这样对客户端也没有其它要求,同时系统的性能在高负荷下得到进一步提高。整个WebMail系统全部采用纯Java代码,服务器端每响应一个服务请求启动一个线程,而不像CGI那样启动一个进程。这样能够节省系统资源,提高系统性能。

实现主要代码

获取用户输入的信息

对于用户输入内容获取功能是通过getParameter方法来实现的,对于输入的文本内容,通过如下代码就能在服务器端获取,程序代码如下:

String username=request.getParameter("login");
String password=request.getParameter("password");
Session session2=Session.getInstance(System.getProperties() ,null);
Store store=session2.getStore("pop3");

 

根据用户输入的信息来连接服务器,程序代码如下:

try{
 store.connect(host,username+"%nyist.net", password);
}
catch(javax.mail.AuthenticationFailedException e)
{content="用户名与密码不匹配";}

 

接收邮件代码段

根据获取用户输入的信息来连接服务器,代码为:

store.connect("nyist.net",-1,request.getParameter("username")+"%nyist.net",request
.getParameter("password"));

 

获取服务器端的信息,代码如下:

Folder folder = store.getFolder("INBOX");
Folder.open (Folder.READ_WRITE);
Message message[]=folder.getMessages();
FetchProfile fp=new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(message,fp);

 

根据服务器上信息的不同格式,使用不同的方式来读取:

String contentbody="";
Object o=message[j].getContent();

 

若其Type为tex/plain就可直接读出,代码如下:

if (message[j].isMimeType("text/plain")) 
{
 contentbody=(String)+"</td>";
 StringBuffer  buf=new  StringBuffer(contentbody.length()+6);
 char  ch=' ';
 for(int  p=0;p<contentbody.length();p++)//若遇到换行就转为<br>
 {ch=contentbody.charAt(p);
  if(ch=='\n')buf.append("<br>");
  else  buf.append(ch);
 }
 contentbody=buf.toString();
}

 

如果信息类型为text/html,不同的信息类型处理的方式稍有不同(如下段代码),由于篇幅有限不再一一说明。

else if (message[j].isMimeType("text/html")) 
 contentbody=(String)o+"</td>";

 

发送邮件代码段

根据用户输入的内容,获取邮件头信息代码如下:

String host = "nyist.net";
String from = request.getParameter("from");
String to = request.getParameter("to");
String subject = request.getParameter("subject");
String content = request.getParameter("content");
Properties props = System.getProperties();
//设置邮件服务
props.put("mail.smtp.host", host);
Session session2 =Session.getInstance(props, null);

 

设置邮件头信息代码如下:

MimeMessage message =new MimeMessage(session2);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
message.setSentDate(new Date());
// create the message part
MimeBodyPart messageBodyPart =new MimeBodyPart();

 

设置邮件内容,构建程序段如下:

messageBodyPart.setText(content);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);

 

用户在发送邮件时常常带有附件,就是将浏览器客户端用户本地的文件传送到POP客户端,实现代码如下:

for (int i=0;i<mySmartUpload.getFiles().getCount();i++)
{
 com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
 if (!myFile.isMissing()) {
 myFile.saveAs("/upload/" + myFile.getFileName()); 
 count ++;
}

 

在上传附件的同时,对上传文件的数量进行统计,并通过out.println("上传了"+count + "个文件")将其在屏幕上显示出来。

在发送的信件中如果有附件,使用如下代码进行发送:

for(int i=0;request.getParameter("file"+i)!=null;i++)
{
 messageBodyPart = new MimeBodyPart();
 File file=new File("/home/mengyu/ROOT/upload/",request.getParameter("file"+i));
 DataSource source =new FileDataSource(file);
 messageBodyPart.setDataHandler(new DataHandler(source));
 messageBodyPart.setFileName(request.getParameter("file"+i));
 multipart.addBodyPart(messageBodyPart);
}
// Put parts in message
message.setContent(multipart);

 

调用Transport的send方法,将构造好MIME Message对象发送出去,代码如下:

Transport.send(message);

 

删除电子邮件代码段

在通过Web界面使用电子邮件过程中,经常要对接收到垃圾邮件或已查看过的邮件进行删除,这也是电子邮件中必不可少的一个功能,所以我们设计了Web界面中删除电子邮件的相应功能,主要程序代码段如下:

Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[]=folder.getMessages();
String msg[]=request.getParameterValues("msg");
for(int i=0,n=msg.length;i<n;i++)
 message[Double.valueOf(msg[i]).intValue()].setFlag(Flags.Flag.DELETED,true);
folder.close(true);

 

用户管理

在使用系统运行的过程中,通过管理界面添加用户,删除不必要的用户,修改用户的密码,这是程序运行过程中必要的模块,代码如下:

//添加用户
Runtime.getRuntime().exec("/home/vpopmail/bin/vadduser"+request.getParameter("user
name")+"@nyist.net "+request.getParameter("passwd"));
//删除用户
Runtime.getRuntime().exec("/home/vpopmail/bin/vdeluser"+request.getParameter("user
name")+"@nyist.net");
//修改用户密码
Runtime.getRuntime().exec("/home/vpopmail/bin/vpasswd"+request.getParameter("usern
ame")+"@nyist.net "+request.getParameter("passwd"));

 

总结

Java简化了企业解决方案的开发、部署和管理等相关的复杂问题,它是面向对象的编程语言,同时也是具有平台独立性、高性能的服务器端编程语言。它提供的标准系统框架和服务适合团体开发,可控制性好,与其它资源的集成性好。采用Java为编程工具开发高性能、高可用性的WebMail服务器具有非常重要的意义。

时间: 2024-10-06 09:34:49

如何使用JSP开发WebMail系统的相关文章

使用JSP开发WebMail系统

js|web 电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook.Foxmail等)与提供邮件服务的服务器(如163.net.263.net.371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方

使用JSP开发WebMail系统_JSP编程

电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook.Foxmail等)与提供邮件服务的服务器(如163.net.263.net.371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和

JSP开发工具的选择

js JSP引擎搭建起来后就可以着手使用开发工具进行JSP的编程了,现下流行的JSP开发工具主要有IBM VisualAge,JBuilder,NetBeans,JRun,Urledit,dreamweaver,editplus等,这里我们主要介绍IBM VisualAge,JBuilder, Jrun三种工具的一些基本情况,大家可以参照其各自的特点,结合自身开发环境进行开发工具的选择. IBM VisualAge for Java IBM的Web开发产品可谓同类之中的庞然大物:体积庞大,功能众

新手指南:Jsp开发环境配置全过程

js|过程 在配置Jsp开发环境的过程中会碰到不少问题,感谢许多前辈经验总结性的文章对我来说简直是雪中送碳,为了帮助像我一样的初学者,在此总结了不少作者的经验,非常感谢他们的无私奉献精神,也希望更多的人把这种精神发扬光大. 以下软件下载连接地址无法显示的话,请直接到官方网站下载即可! 软件下载 Mysql 下载版本:mysql-4.1.13-win32.zip(Windows downloads) http://dev.mysql.com/downloads/mysql/4.1.html JDB

Jsp开发环境配置全过程

js|过程 在配置Jsp开发环境的过程中会碰到不少问题,感谢许多前辈经验总结性的文章对我来说简直是雪中送碳,为了帮助像我一样的初学者,在此总结了不少作者的经验,非常感谢他们的无私奉献精神,也希望更多的人把这种精神发扬光大. 以下软件下载连接地址无法显示的话,请直接到官方网站下载即可! 软件下载 Mysql 下载版本:mysql-4.1.13-win32.zip(Windows downloads) http://dev.mysql.com/downloads/mysql/4.1.html JDB

如何设置JSP开发及运行环境

js 要学习Servlet和JSP开发,首先你必须准备一个符合Java Servlet 2.1/2.2和JavaServer Pages1.0/1.1规范的开发环境.Sun提供免费的JavaServer Web Development Kit(JSWDK),可以从http://java.sun.com/products/servlet/ 下载. 安装好JSWDK之后,你还要告诉javac,在编译文件的时候到哪里去寻找Servlet和JSP类.JSWDK安装指南对此有详细说明,但主要就是把serv

J2EE基础 用Struts框架开发MVC系统步骤

j2ee 由于Struts已经为我们提供了一个非常好的MVC框架,我们利用Struts开发MVC系统时可以大大加快开发的速度.在开发时可以采用的一个开发流程如下: 1. 收集和定义应用需求. 2. 基于数据采集和显示的原则定义和开发"屏幕显示"需求 . 3. 为每一个"屏幕显示"定义访问路径. 4. 定义ActionMappings建立到应用业务逻辑之间的联系. 5. 开发满足"屏幕显示"需求的所有支持对象. 6. 基于每一个"屏幕显示

设置JSP开发、运行环境

js 2.1 安装Servlet和JSP开发工具 要学习Servlet和JSP开发,首先你必须准备一个符合Java Servlet 2.1/2.2和JavaServer Pages1.0/1.1规范的开发环境.Sun提供免费的JavaServer Web Development Kit(JSWDK),可以从http://java.sun.com/products/servlet/下载. 安装好JSWDK之后,你还要告诉javac,在编译文件的时候到哪里去寻找Servlet和JSP类.JSWDK安

设置JSP开发及运行环境

js 要学习Servlet和JSP开发,首先你必须准备一个符合Java Servlet 2.1/2.2和JavaServer Pages1.0/1.1规范的开发环境.Sun提供免费的JavaServer Web Development Kit(JSWDK),可以从http://java.sun.com/products/servlet/ 下载. 安装好JSWDK之后,你还要告诉javac,在编译文件的时候到哪里去寻找Servlet和JSP类.JSWDK安装指南对此有详细说明,但主要就是把serv