首先准备工作,我们得获取到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日