使用javaMail1.4发送email心得


    首先准备工作,我们得获取到javaMail1.4 的 jar 包 下载地址为:http://java.sun.com/products/javamail/downloads/index.html 这是最新的版本 1.4 版。 光有这个还不够,javaMail 发送邮件还需要依赖一个JavaBeans Activation Framework 来支持任意数据块的输入及相应处理。功能似乎不多,但目前许多浏览器和邮件工具中都能找到这种基本的 MIME 型支持。下载地址为:http://java.sun.com/products/archive/javabeans/jaf102.html 版本是1.0.2 ,解压activation.jar 与 mail.jar 放到你程序的类路径之中,现在我们所有的准备工作就算是完事了。

    javaMail1.4 想正确发送邮件,它会让我们去编写一个 发送服务器的验证类去继承Authenticator这个验证,下面给大家一个我写的例子,

/*
 * Authentic.java
 *
 * Created on 2007年10月20日, 上午10:08
 *冷漠大神
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package cn.CCmingzhou.mail;

import javax.mail.PasswordAuthentication;
import javax.mail.Authenticator;

/**
 *冷漠大神 qq:361619004
 *这里有默认的认证服务器 也是我邮箱地址 163 的
 * @author Angel
 */

public class Authentic extends Authenticator {
   
    /** Creates a new instance of Authentic */

    public Authentic() {
    }

    public Authentic(String name,String password)
    {
        this.setUsername(name);
        this.setPwd(password);
    }
    //这里是我重载的构造方法,你也可以不去重载它,但是这样写会有一定的灵活性

    private String username = "hackq";    //大多数是你邮件@前面的部分
    private String pwd = "*******";    //这里的username 是你要发送邮箱的帐号比如说我要用我的[email protected]
                                       //去往外发 那么你这里的username就填写 hackq 也就是说你@前面的部分
                                       //pwd就是你发送邮箱的密码啦,这里还没有涉及到收件箱的 别急在下边
   
   protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(getUsername(), getPwd());
         }
        //看到了吧protected PasswordAuthentication getPasswordAuthentication()这个方法是最重要的了,我们发送
        //邮件的时候就要靠它去验证我们的发送邮件服务器了
        //下面的get()和set() 不是必须的,可以不写,写了可以增加程序的灵活性
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
   
}

验证的类我们写完,下面写邮件的发送类

/*
 * mail.java
 *
 * Created on 2007年10月20日, 上午10:10
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package cn.CCmingzhou.mail;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import java.util.*;
import cn.CCmingzhou.mail.Authentic;
//注意这里的引用类 要把我们刚才写的那个Authentic 验证类引进来

/**
 *冷漠大神 qq:361619004
 * @author Angel
 */

public class Mail {
   
    /** Creates a new instance of mail */
    public Mail() {
    }
     /**
      *这个是默认的发送邮件方法,直接填写邮箱地址,主题,内容,当然这个是用我的email的服务器 也就是 smtp.163.com
      *参数说明 mailAress收件箱地址 title发送邮件的主题 content 发送邮件的内从 可以是超文本标记语言
      */
    public void sendMsg(String mailAddress,String title,String content)
    {
        boolean sessionDebug = false;
        InternetAddress[] address = null;
        try {
          // 设定所要用的Mail 服务器和所使用的传输协议
          java.util.Properties props = System.getProperties();
          props.put("mail.host","smtp.163.com");
          //这里是我们是用的 smtp
          props.put("mail.transport.protocol","smtp");
          props.put("mail.smtp.auth", "true");
          // 产生新的Session 服务

          Authentic auth = new Authentic();
         //看到没,这里我们就用到验证类了 注意我这里是创建的空参的构造方法 因为我在Authentic类里已经给了默认
         //值 也就是username=“hackq” pwd=“******”这里的****替换成你邮箱的密码

        Session mailSession = Session.getDefaultInstance(props, auth);
          mailSession.setDebug(sessionDebug);
          Message msg = new MimeMessage(mailSession); 
          // 设定传送邮件的发信人
          msg.setFrom(new InternetAddress("[email protected]"));
            // 设定传送邮件至收信人的信箱
          address = InternetAddress.parse(mailAddress,false);
          msg.setRecipients(Message.RecipientType.TO, address);
          // 设定信中的主题
          msg.setSubject(title);
          // 设定送信的时间
          //msg.setSentDate(new Date());
          msg.setDataHandler(new javax.activation.DataHandler("love","text/html"));
         //这里要注意一下activation用到它了吧 也就是说我们可以发送超文本的邮件 html格式 “love”参数你可以随
         //便指定为任意字符串
          // 设定传送信的MIME Type
                    // 送信
         msg.setContent(content,"text/html;charset=gb2312");
         //content 是你要发送的内容 也就是你调用sendMsg(String mailAddress,String title,String content)传
          //进来的的值
          Transport.send(msg);
          //out.println("邮件已顺利传送");
        }
            catch (MessagingException mex) {
              mex.printStackTrace();
            }
                   
    }
   
    /**
     *冷漠大神
     *重载的sendMsg()方法,这个方法的参数比较多,这里是设置自己的发送邮件的smtp服务器了 也就是说不用我的那个默认的资源
     *参数说明name 发送邮箱的帐号 password发送邮箱的密码 smtp 发送邮箱的stmp服务器地址 例smtp.163.com sendAddress 发送邮箱mail地址 inceptAddress 接收邮箱地址 title content 同上
     */
    public void sendMsg(String name,String password,String smtp,String sendAddress,String inceptAddress,String title,String content)
    {
        boolean sessionDebug = false;
        InternetAddress[] address = null;
        try {
          // 设定所要用的Mail 服务器和所使用的传输协议
          java.util.Properties props = System.getProperties();
          props.put("mail.host",smtp);
          props.put("mail.transport.protocol",smtp);
          props.put("mail.smtp.auth", "true");
          // 产生新的Session 服务

          Authentic auth = new Authentic(name,password);
        Session mailSession = Session.getDefaultInstance(props, auth);
          mailSession.setDebug(sessionDebug);
          Message msg = new MimeMessage(mailSession); 
          // 设定传送邮件的发信人
          msg.setFrom(new InternetAddress(sendAddress));
            // 设定传送邮件至收信人的信箱
          address = InternetAddress.parse(inceptAddress,false);
          msg.setRecipients(Message.RecipientType.TO, address);
          // 设定信中的主题
          msg.setSubject(title);
          // 设定送信的时间
          //msg.setSentDate(new Date());
          msg.setDataHandler(new javax.activation.DataHandler("love","text/html"));
          // 设定传送信的MIME Type
          //msg.setText(messageText);
          // 送信
         msg.setContent(content,"text/html;charset=gb2312");
          Transport.send(msg);
          //out.println("邮件已顺利传送");
        }
            catch (MessagingException mex) {
              mex.printStackTrace();
            }
                   
    }
  
}
看到了没,这样就可以调用javaMail1.4 在你的jsp程序里顺利的发送邮件了,注意 我重载的那个sendMsg()方法有很多参数,但是如果你调用那个方法会很灵活这就是为什么 我要在Authentic验证类里有个重载的构造方法 和对 username和pwd的get()和set() 就体现在这里个重载的方法里了,我在参数说明那里已经说的很明确了,也就是说你调用这么重载的sendMsg()的话 你可以任意更换你的 验证邮箱的服务器,看到了吧 是不是很灵活啊,这两个类你完全可以打成jar包,用的时候直接创建Mail类的一个对象 调用sendMsg()就可以实现在jsp程序里发送邮件的功能cn.CCmingzhou.mail 这个是我打的jar包,好啦,文章到此就结束啦,希望能和大家一起交流java技术!

                                                      作者:高秋 网名:冷漠大神

                                                          time:2007年11月2日

                                                          


 

你可能感兴趣的:(使用javaMail1.4发送email心得)