流程介绍  

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

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

  

使用步骤

  1. 配置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>
  2. 添加javamail到tomcat的lib目录:Tomcat要新建session对象,那么tomcat就需要引入mail.jar包
  3. 在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,地址:http://ip:端口/test-javamail/MailServlet
  

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

  1. Tomcat通过JNDI方式链接MySql数据库

    原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...

  2. 使用tomcat的jndi方式连接mysql的字符编码设置

    最近新项目使用tomcat中配置jndi连接mysql的方式,在使用过程中发现查询条件为中文的时候查询不出结果,经过一通折腾,发现是jndi在连接数据库的时候忘记设置字符编码. 修改之后的完整配置如下 ...

  3. Tomcat中用JNDI方式加载JDBC DataSource以连接数据库

    概括一下,大致分为四步:安装驱动,填充context.xml,填充web.xml,编写程序取得连接.通过一个小DEMO对这种配置方式有了一点了解,以tomcat6.0连接mysql5.0.8数据库为例 ...

  4. tomcat下jndi的三种配置方式

    jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...

  5. 【转】tomcat下jndi的三种配置方式

    jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...

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

    原文:使用Net.Mail.CDO组件.JMail组件三种方式发送邮件 一.使用Net.Mail 需要服务器认证,大部分服务器端口为25. { MailMessage mailMsg = mailMs ...

  7. 【Tomcat】Tomcat 配置JNDI数据源(三)

    数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connec ...

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

    三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客 字号:T | T 本文对三种Tomcat集群方式的优缺点进行了分析.三种集群方式分别是:使用D ...

  9. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

随机推荐

  1. HTTP权威协议笔记-4.连接管理

    4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...

  2. 动态加载script文件的两种方法

    第一种就是利用ajax方式,把script文件代码从后台加载到前台,然后对加载到的内容通过eval()执行代码.第二种是,动态创建一个script标签,设置其src属性,通过把script标签插入到页 ...

  3. C++中extern关键字用法小结

    总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...

  4. 选项卡切换:自动定时&主动触发事件

    最初学习的是手动触发事件,添加的是onmouseover,其中index是关键,tab标签与现实内容的div索引一一对应,遍历tab标签,当鼠标移动到某标签时,触发对应的内容div显示.for(var ...

  5. vim中 set 用法设置

    vi set用法from google search一.常用收集如下:(vi set)set autoindent     在插入模式下,对每行按与上行同样的标准进行缩进,与shiftwidth选项结 ...

  6. Modern Operating Systems(Ⅰ)——2014.12.15

    进程   进程模型     进程就是一个正在执行的程序的实例  值得注意的是,若一个程序运行了两遍,则算作两个进程 创建进程 在通用系统中,有四种主要事件导致进程的创建 ①系统的初始化 ②执行了 正在 ...

  7. 将golang程序注册为windows服务

    1.go get  bitbucket.org/kardianos/service 2.参考里面的exmaple,就可以了 我承认我有点蛋疼

  8. 【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1

    编码的问题 中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码. Uni ...

  9. SpringMVC的controller方法上若需要参数 如User

    Bean: public class User {    private String name;     private String password;    public String getN ...

  10. Grub实践

    为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区: (1) 为硬盘新建两个主分区:并为其安装grub: (2) 为硬盘的第一个主分区提供内核和ramdisk文件: 为第二个分区提供ro ...