【Mail】Tomcat提供JNDI方式支持JavaMail(三)
流程介绍
Tomcat提供了JavaMail的支持,是通过JNDI的方式实现的,具体流程是:
Tomcat启动的时候,自身产生一个Session对象,放在JNDI容器中给其他项目调用,其他项目只要通过JNDI API就能获取JNDI中的对象,并在项目中使用。
使用步骤
- 配置JNDI资源:新建一个javaweb的maven项目,并在webapp/META-INF中新建一个文件context.xml。
context.xml文件内容如下:
<Context>
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"
mail.smtp.host="smtp.163.com" mail.smtp.auth="true"
mail.transport.protocol="smtp"
/>
</Context> - 添加javamail到tomcat的lib目录:Tomcat要新建session对象,那么tomcat就需要引入mail.jar包
- 在java程序中通过JNDI API获取mail的session对象:写一个类MailServlet.java,去获取session对象。
- MailServlet.java
package com.hd.javamail.servlet; import java.io.IOException; import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class MailServlet
*/
public class MailServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* Default constructor.
*/
public MailServlet() {
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try {
//从tomcat中获取JNDI容器
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//JNDI中获取Mail的Session对象
Session session = (Session) envCtx.lookup("mail/Session"); //新建一个邮件
Message message = new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress("xxxx@163.com"));
//设置多个收件人
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("123456@qq.com"));
//设置主题
message.setSubject("ha");
//设置文本
message.setText("test"); //邮件传送对象
Transport transport = session.getTransport();
//设置,邮件服务器地址、用户名、密码
transport.connect("smtp.163.com", "xxxx@163.com", "xxxxxx");
//发送邮件(邮件,地址)
transport.sendMessage(message, new Address[] {new InternetAddress("123456@qq.com")} );
//关闭连接
transport.close(); response.getWriter().print("ok!"); } catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } - web.xml中配置MailServlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>test-javamail</display-name>
<servlet>
<servlet-name>MailServlet</servlet-name>
<display-name>MailServlet</display-name>
<description></description>
<servlet-class>com.hd.javamail.servlet.MailServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MailServlet</servlet-name>
<url-pattern>/MailServlet</url-pattern>
</servlet-mapping> </web-app> - 注意pom文件中mail.jar的引用,只需在编译的时候使用,运行的时候使用前面tomcat/lib目录下的mail.jar包。所以需要如下配置,否则会出错。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hd</groupId>
<artifactId>test-javamail</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>test-javamail Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies> <!-- javamail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
<scope>provided</scope><!-- 仅编译的时候使用,运行是由tomcat提供 -->
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>test-javamail</finalName>
</build>
</project>
- MailServlet.java
测试运行
在浏览器中访问MailServlet,地址:http://ip:端口/test-javamail/MailServlet
【Mail】Tomcat提供JNDI方式支持JavaMail(三)的更多相关文章
- Tomcat通过JNDI方式链接MySql数据库
原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...
- 使用tomcat的jndi方式连接mysql的字符编码设置
最近新项目使用tomcat中配置jndi连接mysql的方式,在使用过程中发现查询条件为中文的时候查询不出结果,经过一通折腾,发现是jndi在连接数据库的时候忘记设置字符编码. 修改之后的完整配置如下 ...
- Tomcat中用JNDI方式加载JDBC DataSource以连接数据库
概括一下,大致分为四步:安装驱动,填充context.xml,填充web.xml,编写程序取得连接.通过一个小DEMO对这种配置方式有了一点了解,以tomcat6.0连接mysql5.0.8数据库为例 ...
- tomcat下jndi的三种配置方式
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- 【转】tomcat下jndi的三种配置方式
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- 使用Net.Mail、CDO组件、JMail组件三种方式发送邮件
原文:使用Net.Mail.CDO组件.JMail组件三种方式发送邮件 一.使用Net.Mail 需要服务器认证,大部分服务器端口为25. { MailMessage mailMsg = mailMs ...
- 【Tomcat】Tomcat 配置JNDI数据源(三)
数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...
- 三种Tomcat集群方式的优缺点分析
三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客 字号:T | T 本文对三种Tomcat集群方式的优缺点进行了分析.三种集群方式分别是:使用D ...
- 在Tomcat中部署web项目的三种方式
搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...
随机推荐
- Spring里PropertyPlaceholderConfigurer类的使用
1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现.PropertyPlaceho ...
- 移动端click事件延迟300ms的原因以及解决办法
这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点 ...
- Play1+angularjs+bootstrap ++ (idea + livereload)
我的web开发最强组合:Play1+angularjs+bootstrap ++ (idea + livereload) 时间 2012-12-26 20:57:26 Freewind.me原文 ...
- 更新lispbox中的ccl和slime版本
首先C-x C-f然后输入~,找到.emacs文件,根据slime官方文档说明的添加如下代码到文件末尾,重启一下emacs,slime就编译好了,然后这段代码就可以删除.否则每次启动emacs就算不用 ...
- hg常用命令
关于hg命令选项 如果你是在windows系统下,使用的是图像界面,你很可能不常用它.但是一旦你了解这些命令之后,会觉得很方便.hg有很多命令,这些命令都有一定的选项,在开始的时候,只知道用它,有时候 ...
- [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布
基于浏览器的三维地图还算是一个比较高冷的东西,最主要的技术难点是如何在浏览器上 多快好省 的显示三维数据,很遗憾,还真的没有太好的的方案,只能说还有可行的方案. 很久之前用过skyline,使用CS居 ...
- CentOS 7 安装 MySQL
转自:http://www.centoscn.com/mysql/2016/0315/6844.html 环境 CentOS 7.1 (64-bit system) MySQL 5.6.24 Cent ...
- 形象的讲解angular中的$q与promise(转)
以下内容摘自http://www.ngnice.com/posts/126ee9cf6ddb68 promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多. ...
- Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute'
[TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from as ...
- ffmpeg总结整理
ffmpeg总结整理参考链接: http://www.cnblogs.com/youngt/p/5754415.html