通过JDNI来支持java mail
来源:互联网 发布:网络化妆课程 编辑:程序博客网 时间:2024/06/16 20:15
Tomcat提供了jndi的方式来支持javamail的。
Tomcat在系统中配置JNDI,都是定义在$CATALINA_BASE/conf/server.xml或者每个web应用服务自己独自定义的文件META-INF/context.xml
1.
这其中的的属性的配置和配置session中的那些属性一致。
<Context>
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"
mail.smtp.host="localhost"
mail.smtp.auth="true"
mail.transport.protocol="smtp"/>
</Context>
2.
而获得session的方法如下
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
Message message = new MimeMessage(session);
因为session的获得不是我们定义的,所以,它的初始化函数中需要Authenticator的那个,就不能使用了,而是需要让Transport来建立连接。Transport也不能直接使用send,而是要session.getTransport();这样的transport来手工建立连接
而这时候transport使用的是普通API sendMessage而不是静态API send,一定要注意。
代码如下:
Transport transport = session.getTransport();
transport.connect("smtp.sina.com",25,"silencehill_wu", "wugang");
transport.sendMessage(message, to);
transport.close();
如果要使用tomcat的jndi来访问邮件服务,其实就是访问session。那么这个session的产生就是tomcat容器来产生,这个不是访问web应用的lib来获得的,而是需要在容器启动的时候就创建,所以,这就需要将mail.jar放在web容器的lib中。同样的是,关于连接数据源需要jndi访问的时候,需要驱动,也是需要放到容器lib中的,比如mysql connect driver。这样才能通过jndi访问数据库的jndi。
注意出现的问题
java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session
这是因为tomcat已经有一个容器,它启动了tomcat lib中mail.jar,而我们的web应用程序的lib中也包括了一个mail.jar,这两个虽然一样,但是使用的是不同的类加载器,在虚拟机中是不同的位置,容器启动认为这是两个类是不一样。所以,去掉web应用中lib的mail.jar和mailapi.jar就可以解决。
下面是整个API的例子
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("silencehill_wu@sina.com"));
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress("wugang00001@sina.com");
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject("title");
message.setText("just test");
//message.setContent("", "text/plain");
//Transport.send(message);
Transport transport = session.getTransport();
transport.connect("smtp.sina.com",25,"silencehill_wu", "wugang");
transport.sendMessage(message, to);
transport.close();
out.print("Ok");
out.flush();
out.close();
}catch(Exception ex) {
ex.printStackTrace();
ex.printStackTrace(out);
}
}
- 通过JDNI来支持java mail
- Tomcat数据源,Jsp/Java使用JDNI服务来实现数据库连接
- 通过Zend Mail来发送邮件
- 通过java mail发送邮件
- 利用 Java Mail 来收发邮件
- 利用 Java Mail 来收发邮件
- 利用 Java Mail 来收发邮件
- java mail 通过smtp验证发送
- java mail程序编译通过,执行出错
- 通过JAVA发送邮件--mail.jar
- java mail 通过 freemarker 发送邮件
- Java分布式处理技术(RMI,JDNI)
- Java分布式处理技术(RMI,JDNI)
- 用java mail 发邮件的代码,支持群发
- 使用Spring的JAVA Mail支持简化邮件发送
- 用Spring让Java Mail支持简化邮件发送
- 用Spring让Java Mail支持简化邮件发送
- 使用Spring的JAVA Mail支持简化邮件发送
- 图书管理系统(增,改,删,查)功能的实现
- 1,C#入门简介
- Ubuntu 12.04下安装Google拼音输入法
- struts2 用get方法 获取信息 用下面的乱码,用下面代码可以转正常。
- json输出中文出问题
- 通过JDNI来支持java mail
- winform下Socket通信的简单应用
- 信息安全行业里面一些很不错的书
- 异步(延时)逻辑难题,以及采用lua的解决方法
- 虚拟继承
- GetBrowserType.html
- String str = null、String str = ""、String str = new String()中所声明对象str之间的区别:
- SAP HR信息类型
- NetBeans之JSP开发环境的搭建...