通过AJAX或多线程发送邮件实现页面不滞留
2012-11-09 23:50
387 查看
IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!
由于发送带有附件的邮件会耗费很多的时间,所以如果单纯用访问Servlet的形式发送邮件的话,那么会造成客户端页面滞留的效果,这样不是很好,所以我们一般采用Ajax的形式发送页面,实现页面无刷新,或者通过通过创建另一个线程,主线程返回客户端,让子线程发送邮件,这样可以实现页面提前返回。程序代码
MailByThreadServletServlet.java
package edu.servlet.mail; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MailByThreadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); SendMailThread smt = new SendMailThread(); Thread thread = new Thread(smt); thread.start(); response.getWriter().print("邮件正在发送中,请稍等......"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }子线程SendMailThread.java
package edu.servlet.mail; import java.io.FileInputStream; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import javax.naming.Context; import javax.naming.InitialContext; public class SendMailThread implements Runnable{ @Override public void run() { try{ Context initCtx = new InitialContext(); //tomcat将创建的环境容器放在初始化容器中,需要通过"java:comp/env"(固定)查找 Context envCtx = (Context) initCtx.lookup("java:comp/env"); //在环境参数容器中通过"mail/Dog"查找到Session对象 Session session = (Session) envCtx.lookup("mail/Dog"); /* * 验证这里tomcat的类加载器(envCtx.lookup("mail/Dog"))与应用程序的类加载器(Session)的不同 * 但是这里不知道为什么是一样的结果,按说是不一样的,反正也不是很重要 * 都是 org.apache.catalina.loader.StandardClassLoader */ System.out.println(envCtx.lookup("mail/Dog").getClass().getClassLoader().getClass().getName()); System.out.println(Session.class.getClassLoader().getClass().getName()); //设置Debug的方式打印执行过程 session.setDebug(true); //创建代表邮件内容的Message对象。 Message msg = new MimeMessage(session,new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\SendMultipartMessageDemo3.eml")); Transport transport = session.getTransport(); transport.connect("smtp.163.com", 25, "xh216319","xiaoxiao"); transport.sendMessage(msg, InternetAddress.parse( MimeUtility.encodeText("ITSTAR")+"<itstar1965@sina.com>,"+MimeUtility.encodeText("肖华")+"<xh216319@163.com>")); }catch (Exception e) { }finally{ } } }访问:http://localhost:8080/JavaMail_02/servlet/MailByThreadServlet,则马上就会返回
相关文章推荐
- jmail.message 实现发送邮件(测试通过)
- java使用JMail通过QQ邮件服务器实现自动发送邮件
- 通过修改ASP代码来实现Jmail发送邮件方法详解
- 用C++实现读取windows日志并用zlib压缩后通过jwsmtp邮件发送出去.
- jsp页面通过ajax向后台传参实现收藏功能
- PHP通过SMTP实现发送邮件_包括附件
- PHP实现通过get方式识别用户发送邮件的方法
- linux 通过SendMail 实现向外网发送邮件报警
- 如何通过JQ,Ajax来实现返回到上一个页面并进行刷新
- 通过log4j实现发送错误信息的邮件功能
- 通过 JavaMail 实现QQ邮件发送
- 通过commons-email-1.5简单实现邮件发送
- Laravel通过ajax的POST方式传值并实现页面跳转
- 使用Pear和php socket来实现通过smtp验证发送邮件
- PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
- SQL Server 2008 通过配置数据库邮件实现发送邮件功能(转)
- 利用Zabbix通过邮件发送Screen图形报表实现
- 通过JavaMail来实现邮件发送
- MVC使用ASP.NET Identity 2.0实现用户身份安全相关功能,比如通过短信或邮件发送安全码,账户锁定等
- JAVA邮件发送的简单实现,使用javamail通过smtp协议发信