【Mail】Tomcat提供JNDI方式支持JavaMail(三)

流程介绍  

  Tomcat提供了JavaMail的支持,是通过JNDI的方式实现的,具体流程是:

  Tomcat启动的时候,自身产生一个Session对象,放在JNDI容器中给其他项目调用,其他项目只要通过JNDI API就能获取JNDI中的对象,并在项目中使用。

  

使用步骤

  1. 配置JNDI资源:新建一个javaweb的maven项目,并在webapp/META-INF中新建一个文件context.xml。

    context.xml文件内容如下:

    1 <Context>
    2   <Resource name="mail/Session" auth="Container"
    3             type="javax.mail.Session"
    4             mail.smtp.host="smtp.163.com" mail.smtp.auth="true"
    5             mail.transport.protocol="smtp"
    6             />
    7 </Context>
  2. 添加javamail到tomcat的lib目录:Tomcat要新建session对象,那么tomcat就需要引入mail.jar包
  3. 在java程序中通过JNDI API获取mail的session对象:写一个类MailServlet.java,去获取session对象。
    • MailServlet.java

       1 package com.hd.javamail.servlet;
       2
       3 import java.io.IOException;
       4
       5 import javax.mail.Address;
       6 import javax.mail.Message;
       7 import javax.mail.MessagingException;
       8 import javax.mail.Session;
       9 import javax.mail.Transport;
      10 import javax.mail.internet.InternetAddress;
      11 import javax.mail.internet.MimeMessage;
      12 import javax.naming.Context;
      13 import javax.naming.InitialContext;
      14 import javax.naming.NamingException;
      15 import javax.servlet.ServletException;
      16 import javax.servlet.http.HttpServlet;
      17 import javax.servlet.http.HttpServletRequest;
      18 import javax.servlet.http.HttpServletResponse;
      19
      20
      21 /**
      22  * Servlet implementation class MailServlet
      23  */
      24 public class MailServlet extends HttpServlet {
      25     private static final long serialVersionUID = 1L;
      26
      27     /**
      28      * Default constructor.
      29      */
      30     public MailServlet() {
      31         // TODO Auto-generated constructor stub
      32     }
      33
      34     /**
      35      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      36      */
      37     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      38         doPost(request, response);
      39     }
      40
      41     /**
      42      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      43      */
      44     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      45
      46         try {
      47             //从tomcat中获取JNDI容器
      48             Context initCtx = new InitialContext();
      49             Context envCtx = (Context) initCtx.lookup("java:comp/env");
      50             //JNDI中获取Mail的Session对象
      51             Session session = (Session) envCtx.lookup("mail/Session");
      52
      53             //新建一个邮件
      54             Message message = new MimeMessage(session);
      55             //设置发件人
      56             message.setFrom(new InternetAddress("[email protected]"));
      57             //设置多个收件人
      58             message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
      59             //设置主题
      60             message.setSubject("ha");
      61             //设置文本
      62             message.setText("test");
      63
      64             //邮件传送对象
      65             Transport transport = session.getTransport();
      66             //设置,邮件服务器地址、用户名、密码
      67             transport.connect("smtp.163.com", "[email protected]", "xxxxxx");
      68             //发送邮件(邮件,地址)
      69             transport.sendMessage(message,  new Address[] {new InternetAddress("[email protected]")} );
      70             //关闭连接
      71             transport.close();
      72
      73             response.getWriter().print("ok!");
      74
      75         } catch (MessagingException e) {
      76             // TODO Auto-generated catch block
      77             e.printStackTrace();
      78         } catch (NamingException e) {
      79             // TODO Auto-generated catch block
      80             e.printStackTrace();
      81         }
      82     }
      83
      84 }
    • web.xml中配置MailServlet
       1 <!DOCTYPE web-app PUBLIC
       2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
       4
       5 <web-app>
       6     <display-name>test-javamail</display-name>
       7     <servlet>
       8         <servlet-name>MailServlet</servlet-name>
       9         <display-name>MailServlet</display-name>
      10         <description></description>
      11         <servlet-class>com.hd.javamail.servlet.MailServlet</servlet-class>
      12     </servlet>
      13     <servlet-mapping>
      14         <servlet-name>MailServlet</servlet-name>
      15         <url-pattern>/MailServlet</url-pattern>
      16     </servlet-mapping>
      17
      18 </web-app>
    • 注意pom文件中mail.jar的引用,只需在编译的时候使用,运行的时候使用前面tomcat/lib目录下的mail.jar包。所以需要如下配置,否则会出错。
       1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
       3     <modelVersion>4.0.0</modelVersion>
       4     <groupId>com.hd</groupId>
       5     <artifactId>test-javamail</artifactId>
       6     <packaging>war</packaging>
       7     <version>0.0.1-SNAPSHOT</version>
       8     <name>test-javamail Maven Webapp</name>
       9     <url>http://maven.apache.org</url>
      10     <dependencies>
      11
      12         <!-- javamail -->
      13         <dependency>
      14             <groupId>javax.mail</groupId>
      15             <artifactId>mail</artifactId>
      16             <version>1.4.7</version>
      17             <scope>provided</scope><!-- 仅编译的时候使用,运行是由tomcat提供 -->
      18         </dependency>
      19
      20         <dependency>
      21             <groupId>javax.servlet</groupId>
      22             <artifactId>javax.servlet-api</artifactId>
      23             <version>3.0.1</version>
      24             <scope>provided</scope>
      25         </dependency>
      26         <dependency>
      27             <groupId>javax.servlet.jsp</groupId>
      28             <artifactId>jsp-api</artifactId>
      29             <version>2.2</version>
      30             <scope>provided</scope>
      31         </dependency>
      32
      33         <dependency>
      34             <groupId>junit</groupId>
      35             <artifactId>junit</artifactId>
      36             <version>3.8.1</version>
      37             <scope>test</scope>
      38         </dependency>
      39     </dependencies>
      40     <build>
      41         <finalName>test-javamail</finalName>
      42     </build>
      43 </project>

测试运行

  在浏览器中访问MailServlet,地址:http://ip:端口/test-javamail/MailServlet
  

时间: 2024-12-25 20:09:08

【Mail】Tomcat提供JNDI方式支持JavaMail(三)的相关文章

在Tomcat配置JNDI数据源的三种方式

在Tomcat配置JNDI数据源的三种方式 分类: java进阶2012-07-01 10:24 18328人阅读 评论(0) 收藏 举报 tomcatjdbcweblogicmysqlbean测试 目录(?)[+] 在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JNDI配置 我猜是因为Tomcat的配置需要改配置文件 不像JBoss,Weblogic等服务器在

tomcat下jndi的三种配置方式

jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API. 第一种:全局配置. 1)在tomcat的conf文件夹下的context.xml配置文件中加入: <Resource name="jndi/mybatis" auth="Container" type="javax.sql.DataSource" driverClassName=&qu

使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

原文:使用Net.Mail.CDO组件.JMail组件三种方式发送邮件 一.使用Net.Mail 需要服务器认证,大部分服务器端口为25. 1 /// <summary> 2 /// 用MailMessage通过需要认证的SMTP服务器发送邮件,可以发送附件 3 /// </summary> 4 /// <param name="frmAddress">发件箱地址,例:[email protected]</param> 5 /// <

三种Tomcat集群方式的优缺点分析

三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客 字号:T | T 本文对三种Tomcat集群方式的优缺点进行了分析.三种集群方式分别是:使用DNS轮询,使用Apache R-proxy方式,以及使用Apache mod_jk方式. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 Tomcat集群方式有三种,分别是: 1.使用DNS轮询. 2.使用Apache R-proxy方式. 3.使用Apache mod_jk方式

Dubbo源码分析(三):自定义Schema--基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)

在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担.Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤: 设计配置属性和JavaBean 编写XSD文件 编

DB2支持的三种表空间SMS、DMS、DMS的自动存储

DB2支持的三种表空间SMS.DMS.DMS的自动存储 DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层.表空间在数据库中创建,表在表空间中创建.容器是一个物理存储设备.它可以由目录名.设备名或文件名标识.容器被分配给表空间.表空间可以跨许多容器(类似于Oracle中datafile的概念),这意味着可以突破操作系统对于一个容器可以包含的数据量的限制.DB2 支持三种表空间: ·         系统管理的空间(System-Managed Space,SMS):在这里,由操作系统的文

Tomcat配置JNDI数据源

本文将介绍Tomcat配置JNDI数据源的方法,主要分为配置局部数据源(仅供单个应用使用)和全局数据源(所有用该Tomcat的应用都可以使用) 一.思考 从我们学习Web开发以来,我们都是通过程序代码来实现数据库的访问的.从一开始直接将数据库配置信息写在代码中,到后来将配置信息抽取出来写在了Properties文件中,我们访问数据库的代码更加精简. 而通过JNDI方式访问数据库则更为直接,JNDI连接数据库的方式直接将数据库信息放在Tomcat中,而项目代码里直接通过JNDI技术就可以得到数据源

Tomcat 6 --- JNDI详解

JNDI(Java Naming and Directory Interface, Java命名和目录接口),说白了,就是通过配置一些xml文件,方便用户直接调用API使用某些通用的资源. 举个简单的例子,如果在tomcat中部署了很多应用,应用都需要使用同一个数据库,如果每个应用都在代码中配置数据库的连接,肯定是很麻烦的. 所以通过JNDI就可以简单的通过 InitialContext 获取到统一配置的资源,简化代码的编写. 本篇主要内容按照上面来讲解,其中样例部分主要说明一下通用javabe

8 -- 深入使用Spring -- 8...1 Spring提供的DAO支持

8.8.1 Spring提供的DAO支持. DAO模式是一种标准的Java EE设计模式,DAO模式的核心思想是,所有的数据库访问都通过DAO组件完成,DAO组件封装了数据库的增.删.查.改等原子操作.业务逻辑组件依赖于DAO组件提供的数据库原子操作,完成系统业务逻辑的实现. 对于Java EE应用的架构,有非常多的选择,但不管细节如何变换,Java EE应用都大致可分为如下三层. ⊙ 表现层. ⊙ 业务逻辑层. ⊙ 数据持久层. 轻量级Java EE架构以Spring IoC容器为核心,承上启