当前页面: 开发资料首页 → JSP 专题 → 使用JSP开发WebMail系统
摘要: 使用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会占用大量宝贵的内存和系统资源。
</td></tr></table>String username=request.getParameter("login"); String password=request.getParameter("password"); Session session2=Session.getInstance(System.getProperties() ,null); Store store=session2.getStore("pop3");
</td></tr></table>try{ store.connect(host,username+"%nyist.net", password); } catch(javax.mail.AuthenticationFailedException e) {content="用户名与密码不匹配";}
</td></tr></table>store.connect("nyist.net",-1,request.getParameter("username")+"%nyist.net",request .getParameter("password"));
</td></tr></table>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);
</td></tr></table>String contentbody=""; Object o=message[j].getContent();
</td></tr></table>if (message[j].isMimeType("text/plain")) { contentbody=(String)+"</td>"; StringBuffer buf=new StringBuffer(contentbody.length()+6); char ch=' '; for(int p=0;p {ch=contentbody.charAt(p); if(ch=='\n')buf.append("
"); else buf.append(ch); } contentbody=buf.toString(); }
</td></tr></table>else if (message[j].isMimeType("text/html")) contentbody=(String)o+"</td>";
</td></tr></table>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);
</td></tr></table>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();
</td></tr></table>messageBodyPart.setText(content); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart);
</td></tr></table>for (int i=0;i
</td></tr></table>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);
</td></tr></table>Transport.send(message);
</td></tr></table>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
</td></tr></table>//添加用户 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"));