电子邮件(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服务器具有非常重要的意义。
分享到:
相关推荐
在webmail系统中,JSP通常用来生成邮件列表、编写和阅读邮件等界面。 2. **javabean**:JavaBean是一种符合特定规范的Java类,它可以作为组件,被其他Java应用程序或JSP页面复用。在webmail系统中,javabean可能被...
在Eclipse中开发Webmail系统,首先需要安装Web项目相关的插件,如Web Tools Platform (WTP)。WTP提供了创建、编辑和调试Web项目的功能,包括动态Web项目和Java服务器页面(JSP)等。 三、Tomcat服务器 Tomcat是...
本设计选择Linux平台,结合Qmail作为SMTP和POP3邮件服务器,利用LDAP目录服务器管理用户信息,同时采用JavaMail、JavaBean和JSP作为开发工具,目标是构建一个稳定、兼容性好且易于扩展的WebMail系统。 系统开发主要...
在WebMail系统中,Procmail的使用可以有效防止垃圾邮件对用户造成干扰,提高用户体验。 3. WebMail系统的架构设计 一个高性能的WebMail系统通常采用三层架构:表现层(前端)、业务逻辑层(后端服务)和数据存储层...
这里提到的项目是使用Java Server Pages (JSP) 技术实现的一个Webmail系统。JSP是一种服务器端脚本语言,用于创建动态、交互式的Web应用程序。 在JSP中,开发者可以混合HTML、CSS、JavaScript以及Java代码,使得...
总的来说,"webmail_java"项目是一个使用Java、ANT和CVS技术实现的WebMail系统,它展示了如何结合这些工具和API来创建一个功能齐全、安全可靠的邮件服务。在实际开发中,还需要考虑性能优化、用户体验设计以及适应...
【描述】中的“一个java,webmail的SAMPLE,可以直接使用的”,表明这个压缩包可能包含了一个用Java实现的Webmail系统的示例代码。这样的系统通常会涉及到以下几个核心部分: 1. **服务器端Java技术**:Java ...
在WebMail系统中,JSP通常用于构建用户界面,比如展示邮件列表、编写新邮件的表单等。 3. **JavaMail API**:JavaMail API是Java提供的用于处理邮件的API,它实现了SMTP(简单邮件传输协议)、POP3(邮局协议版本3...
综合以上内容,我们讨论了如何使用Java技术构建开源WebMail系统,并且了解了这些系统中通常会用到的关键技术组件和服务。我们还探讨了这些系统如何与邮件服务器和客户端进行交互,以及为了提供更好的用户体验和服务...
Java WebMail是一个基于Java技术构建的在线电子邮件系统,它允许用户通过Web浏览器访问和管理他们的邮件。这个系统的核心是利用Java Servlets...通过深入理解和实践这些技术,开发者可以构建出自己的Java WebMail系统。
在icemail这个压缩包文件中,可能包含了ice webmail系统的源代码、配置文件、数据库脚本以及其他相关资源。分析这些文件可以帮助我们更好地理解系统的实现细节,如类结构、数据库设计以及具体的业务逻辑。开发者可以...
【标题】"简单web邮件收发系统"是一个基于Java Web技术构建的应用,它结合了SQLServer数据库、JSP(JavaServer Pages)以及Servlet技术,旨在提供一个基础的邮件收发功能。这个系统允许用户通过网页界面发送和接收...
在WebMail系统中,JavaMail API是核心组件,它提供了发送SMTP邮件、访问IMAP/POP3邮件服务器等功能,使得开发者可以方便地实现邮件的收发功能。 5. 数据库连接:WebMail通常需要存储用户的账号信息、邮件内容等数据...
通过JSP、Servlet和JavaBean的协同工作,我们可以构建出功能完备且易于维护的Webmail系统。这种架构既能够清晰地分离视图、控制和模型,也支持组件重用和灵活的扩展,是企业级Java Web开发的标准选择。
系统开发完成后需要进行测试,文档中提到了Foxmail、Webmail等软件可能与系统的测试或部署有关,表明开发者通过这些工具来进行沟通和数据交换。 由于文档内容不完整和存在一定的错误,以上信息仅是对文档内容可能...
在WebMail系统的实现中,通常采用Java作为开发语言,利用Java Server Pages (JSP) 技术处理动态内容,并结合Servlet进行服务器端的业务逻辑处理。JSP提供了强大的功能,虽然它建立在Servlet之上,但在性能上与...
4. **数据库集成**:为了存储用户信息、邮件、联系人等数据,Webmail系统通常会与关系型数据库(如MySQL、PostgreSQL)集成。这涉及到SQL查询的编写和使用Java的JDBC(Java Database Connectivity)来与数据库交互。...
7. **数据库管理**: 邮件信息通常会存储在数据库中,可能使用了如MySQL或Oracle等关系型数据库管理系统。SQL查询用于检索和操作邮件数据。 8. **文件上传和下载**: 如果系统支持附件,那么它需要处理文件上传和下载...
构建基于FreeBSD和Postfix的虚拟域邮件系统5.5,涉及到操作系统管理、邮件服务器配置、数据库操作和Web开发等多个方面。这个过程需要对这些技术有深入理解,并能灵活运用。完成这样的系统不仅能提升企业的邮件处理...