使用JSP开发WebMail系统_JSP编程

电子邮件(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 partMimeBodyPart 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 messagemessage.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("username")+"@nyist.net "+request.getParameter("passwd"));//删除用户Runtime.getRuntime().exec("/home/vpopmail/bin/vdeluser"+request.getParameter("username")+"@nyist.net");//修改用户密码Runtime.getRuntime().exec("/home/vpopmail/bin/vpasswd"+request.getParameter("username")+"@nyist.net "+request.getParameter("passwd"));

总结

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jsp web编程指南、jsp web编程实战宝典、winwebmail邮件系统、webmail邮件系统、web文件管理系统 jsp,以便于您获取更多的相关知识。

时间: 2024-10-22 04:49:44

使用JSP开发WebMail系统_JSP编程的相关文章

使用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系统

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

[JAVA]十四种Java开发工具点评_JSP编程

  在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4.Borl

JSP应用的安全问题_JSP编程

一.概述  当网络编程越来越方便,系统功能越来越强大,安全性却指数倍地下降.这恐怕就是网络编程的不幸和悲哀了.各种动态内容生成环境繁荣了WWW,它们的设计目标就是为了给开发者更多的力量,给最终用户更多的方便.正因为如此,系统设计师和开发者必须明确地把安全问题作为一个考虑因素,事后追悔很难奏效.  从安全的角度来看,服务器端WWW应用的弱点来源于各种各样的交互能力和传输通道.它们是攻击者直接可以用来影响系统的工具.在攻击者寻找和利用系统安全漏洞时,它们总是给系统安全带来压力.对付所有这些攻击的通用

jsp 重复提交问题_JSP编程

看了网上的,有几种方法: 1 在你的表单页里HEAD区加入这段代码: 复制代码 代码如下: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" C

JSP开发入门(二)----JSP语法的基本原理_JSP编程

安装之后,接下来我们要讨论JSP的语法.如果要偷懒,你可以下载语法卡而如果你不熟悉 Java的程序设计,你可能会想要参考Sun的使用手册:然而,网站建立者不应该做太多的Java发展.除了几个函式呼叫之外,出现在你JSP网页上的Java程序代码应该将它减到最少; 记住这点之后,现在让我们先来看看JSP的编译器指引与指令组件,之后我们将解释JavaBeans与内部对象. JSP编译器指引与指令组件有五种型态.JSP 1.0之后,大部分的JSP是包含在以<% 作为开始%>作为结束的单一卷标里.新的

JSP开发入门(五)--JSP其他相关资源_JSP编程

JSP其他相关资源: Servlets and JavaServer Pages (JSP) 1.0: A Tutorial http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/ JavaServer PagesTM: A Developer's Perspective http://developer.java.sun.com/developer/technicalArticles/Programming/jsp/ JAVASERVER PAG

利用JSP建立Web站点_JSP编程

JSP是由Sun微系统公司于1999年6月推出的一项技术,是基于JavaServlet以及整个java体系的Web开发技术,利用这一技术可以建立先进.安全和跨平台的动态网站.JSP 与ASP非常相似.两者都提供在HTML 代码中混合某种程序代码.由语言引擎解释执行程序代码的能力.在ASP或JSP 环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑.ASP下的编程语言是 VBScript 之类的脚本语言,而JSP 使用的是Java.TRS及其JavaBeansTRS系统是

几则JSP入门知识总结_JSP编程

    从去年9月份,我就开始着手学JSP,以前也只有一点程序的意识,一路上摸索过来,经过了很多磨难,终于有一天,我就像一个旱鸭子学会游泳一样,心里无比高兴,熬了几天夜,终于写成了这个纯JSP的文章发布程序. 相信下面的几则小知识对向我这样水平的菜鸟有一定的帮助! ============================================================================== 1.传递表单参数: String name = new String(req