快捷搜索:

如何使用JSP开发WebMail系统

电子邮件(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)+"";

StringBufferbuf=newStringBuffer(contentbody.length()+6);

charch=' ';

for(intp=0;p";

发送邮件代码段

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

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

{

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

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办事用具有异常紧张的意义。

您可能还会对下面的文章感兴趣: