分享

JavaMail 开发笔记

 openwudi 2010-10-08
JavaMail是为了开发者处理邮件相关的编程接口。用来处理email的API。此API可以很方便的执行常用的邮件传输任务。Javamail不是标准的Java API ,所以需要去单独下载,JavaMail的包名为mail.jar。如果使用JavaMail还需要JAF的支持,JDK1.6已经集成了JAF,所以不需要另行下载,之前的老版本JDK需要单独下载JAF。

以下是我写的一个简单的邮件发送程序案例,注释很详细。值得注意的是一定要把mail.jar加入lib中。

import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Demo1 {

    public static void main(String[] args) throws Exception {
        //新建配置文件
        Properties props = new Properties();
        //配置文件mail.smtp.auth为需要验证
        props.setProperty("mail.smtp.auth", "true");
        //配置文件mail.transport.protocol设置为smtp方式
        props.setProperty("mail.transport.protocol", "smtp");
       
        //新建session,加入配置
        Session session = Session.getInstance(props);
        //打印连接信息
        session.setDebug(true);
        //新建Message对象,传入session参数
        Message msg = new MimeMessage(session);
        //设置Message内容
        msg.setSubject("JavaMail");
        msg.setText("你好吗?");
        msg.setFrom(new InternetAddress("此处为你要发送的邮箱地址"));
       
        //设置发送信息
        Transport transport = session.getTransport();
        //连接smtp服务器
        transport.connect("smtp.qq.com", 25, "账号", "密码");
        //通过服务器发送Message对象,第二个参数为发送地址的数组,可以群发。
        transport.sendMessage(msg, new Address[] { new InternetAddress(
                "发送的地址1"),new InternetAddress(
                "发送的地址2") });
        //释放资源
        transport.close();
    }

}

是否觉得JavaMail API很方便?

下面一个案例是使用Servlet实现JavaMail的发送功能,并且用到了JNDI。

第一步:需要在tomcat目录的lib下加入mail.jar(有人要问为什么了,其实很简单,因为使用JNDI的话,Session对象是需要tomcat创建的,所以如果不在tomcat\lib下加入mail.jar,就会找不到该类。并且在webapp中不能在加入mail.jar文件了,不然会报错,出现类转换异常。那为什么又会出现此异常呢?因为当程序创建Session对象的时候,webapp类加载器会加载webapp下的mail.jar文件,而tomcat此时的类加载器会加载tomcat\lib下的mail.jar,内存中有两份Session字节码,这样会出现转换异常。)

第二步:配置META-INF/context.xml内容如下
<Context>
    <Resource name="mail/Session" auth="Container" type="javax.mail.Session"
        mail.smtp.host="smtp.qq.com" mail.smtp.auth="true"
        mail.transport.protocol="smtp" />
</Context>

第三步:编写Servlet

package com.openwudi.mail.servlet;

import java.io.IOException;

import javax.mail.Message;
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.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendMailServlet extends HttpServlet {

    private static final long serialVersionUID = -7439862270987299401L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        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("从什么邮箱发送"));
            InternetAddress to[] = new InternetAddress[1];
            to[0] = new InternetAddress("发送到什么邮箱");
            message.setRecipients(Message.RecipientType.TO, to);
            message.setSubject("ServletMail");
            message.setText("使用JavaWeb发送的邮件!");
            Transport transport = session.getTransport();
            transport.connect("smtp.qq.com", "账号", "密码");
            transport.sendMessage(message, to);
            transport.close();
            response.getWriter().print("ok!");
        } catch (Exception e) {
            e.printStackTrace(response.getWriter());
        }

    }

}

邮件开发不知道现在是否用的还比较多,在web应用中可以成为一个附加模块,比如从数据库中导入邮箱地址,然后群发邮件,比手工发的效率会高很多。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多