首先是发送邮件需要sun的mail.jar开发包
1、发送邮件的配置文件
mail.properties
########## Message type #############
## type 1:mail 2:insite message 3:mobile message 4: all ######
type=1
###### host(mail server) ######
mailserver=mail.nci.com.cn
####### from (mail man) ########
mailfrom=anhk@nci.com.cn
username=anhk
password=anhk.com
######### can send many people mail ###############
mailto=jones.ahk@gmail.com;jones_ahk@yahoo.com.cn
2、读取配置邮件的文件
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
public class Config {
// 配置文件名称
private static String configFile = "/conf/mail.properties";
private static Properties properties = null;
public Config(){
init();
}
private void init(){
try {
properties=new Properties();
InputStream fis=this.getClass().getResourceAsStream(configFile);
properties.load(fis);
fis.close();
} catch (IOException e) {
System.out.println("== read mail.properties is error ="+e.getMessage());
}
}
/** 取得配置属性 */
public String getProperty(String key) {
return properties.getProperty(key);
}
/** 取得配置属性(无此属性,返回默认值) */
public String getProperty(String key, String defaultValue) {
return properties.getProperty(key, defaultValue);
}
/**
* 解析配置文件中的多个收件人的邮件地址
* @param str
* @return
*/
public String[] splitString(String str){
String[] mailto = null;
List list=null;
if(str!=null){
list=new ArrayList();
StringTokenizer st=new StringTokenizer(str,";");
while(st.hasMoreTokens()){
list.add(st.nextToken());
}
}
if(list!=null && list.size()>0){
mailto=new String[list.size()];
for(int i=0;i<list.size();i++)
mailto[i]=(String)list.get(i);
}
return mailto;
}
public static void main(String[] args){
new Config();
System.out.println("=====");
}
}
3、邮件实体
import java.io.Serializable;
import java.util.Vector;
/**
* 发送邮件的实体
* CompName: 杭州新世纪信息技术有限公司
* WebSite : http://www.nci.com.cn
*
* @author ahk
* @msn: jones_ahk@hotmail.com
*/
public class MailEntity implements Serializable{
private String[] to; //收件人列表
private String from; //发件人
private String host; //smtp主机
private String username; //发送者邮件服务器的用户名
private String password; //发送者邮件服务器的密码
private String subject; //邮件主题
private String content; //邮件正文
private String filename; //附件文件名
private Vector file = new Vector();//附件文件集合
public MailEntity(){
super();
}
/**
* <br>
* 方法说明:构造器,提供直接的参数传入 <br>
* 输入参数: <br>
* 返回类型:
*/
public MailEntity(String[] to, String from, String smtpServer, String username,
String password, String subject, String content) {
this.to = to;
this.from = from;
this.host = smtpServer;
this.username = username;
this.password = password;
this.subject = subject;
this.content = content;
}
/**
* <br>
* 方法说明:往附件组合中添加附件 <br>
* 输入参数: <br>
* 返回类型:
*/
public void attachfile(String fname) {
file.addElement(fname);
}
/**
* <br>
* 方法说明:设置邮件服务器地址 <br>
* 输入参数:String host 邮件服务器地址名称 <br>
* 返回类型:
*/
public void setHost(String host) {
this.host = host;
}
/**
* <br>
* 方法说明:设置登录服务器校验密码 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setPassWord(String pwd) {
this.password = pwd;
}
/**
* <br>
* 方法说明:设置登录服务器校验用户 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setUserName(String usn) {
this.username = usn;
}
/**
* <br>
* 方法说明:设置邮件发送目的邮箱 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setTo(String[] to) {
this.to = to;
}
/**
* <br>
* 方法说明:设置邮件发送源邮箱 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setFrom(String from) {
this.from = from;
}
/**
* <br>
* 方法说明:设置邮件主题 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setSubject(String subject) {
this.subject = subject;
}
/**
* <br>
* 方法说明:设置邮件内容 <br>
* 输入参数: <br>
* 返回类型:
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return content.
*/
public String getContent() {
return content;
}
/**
* @return file.
*/
public Vector getFile() {
return file;
}
/**
* @param file.
*/
public void setFile(Vector file) {
this.file = file;
}
/**
* @return filename.
*/
public String getFilename() {
return filename;
}
/**
* @param filename.
*/
public void setFilename(String filename) {
this.filename = filename;
}
/**
* @return from.
*/
public String getFrom() {
return from;
}
/**
* @return host.
*/
public String getHost() {
return host;
}
/**
* @return password.
*/
public String getPassword() {
return password;
}
/**
* @param password.
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return subject.
*/
public String getSubject() {
return subject;
}
/**
* @return to.
*/
public String[] getTo() {
return to;
}
/**
* @return username.
*/
public String getUsername() {
return username;
}
/**
* @param username.
*/
public void setUsername(String username) {
this.username = username;
}
}
4、发送邮件
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
* 功能:根据配置文件判断发送某种信息通知客户
* 这里先实现了邮件通知功能
* @version 1.0
*/
public class MailSender implements Serializable{
/**初始化配置文件*/
private static Config cfg;
static{
cfg=new Config();
}
public MailSender(){
}
/**
* 发送信息,根据配置文件内容进行功能选择
*/
public static void sendMessage(String subject,String content){
String type=cfg.getProperty("type");
//发送邮件设置
if(type!=null && type.equals("1")){
MailEntity mail=new MailEntity();
mail.setFrom(cfg.getProperty("mailfrom"));
mail.setUserName(cfg.getProperty("username"));
mail.setPassword(cfg.getProperty("password"));
mail.setHost(cfg.getProperty("mailserver"));
mail.setSubject(subject);
mail.setContent(content);
mail.setTo(cfg.splitString(cfg.getProperty("mailto")));
//开始发送邮件
sendMail(mail);
//发送站内短信
}else if(type!=null && type.equals("2")){
MessageEntity entity=new MessageEntity();
sendSiteMessage(entity);
//发送手机短信
}else if(type!=null && type.equals("3")){
//全部发送
}else{
}
}
/**
* <br>
* 方法说明:发送邮件 <br>
* 输入参数: <br>
* 返回类型:boolean 成功为true,反之为false
*/
public static boolean sendMail(MailEntity entity) {
final String userName=entity.getUsername();
final String password=entity.getPassword();
boolean flag=false;
//构造mail session
Properties props = System.getProperties();
props.put("mail.smtp.host", entity.getHost());
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,password);
}
});
try {
//构造MimeMessage 并设定基本的值
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(entity.getFrom()));
InternetAddress[] address = null;
//设置多个收件人的邮件地址
if(entity.getTo().length>0){
address=new InternetAddress[entity.getTo().length];
for(int i=0;i<entity.getTo().length;i++){
address[i]=new InternetAddress(entity.getTo()[i]);
}
}
//发送到邮箱
msg.setRecipients(Message.RecipientType.TO, address);
//抄送到邮箱
//msg.setRecipient(Message.RecipientType.CC, new InternetAddress(mailaddr));
msg.setSubject(transferChinese(entity.getSubject()));
//构造Multipart
Multipart mp = new MimeMultipart();
//向Multipart添加正文
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setText(entity.getContent());
//向MimeMessage添加(Multipart代表正文)
mp.addBodyPart(mbpContent);
//向Multipart添加附件
Enumeration efile = entity.getFile().elements();
while (efile.hasMoreElements()) {
MimeBodyPart mbpFile = new MimeBodyPart();
String filename = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(filename);
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(fds.getName());
//向MimeMessage添加(Multipart代表附件)
mp.addBodyPart(mbpFile);
}
entity.getFile().removeAllElements();
//向Multipart添加MimeMessage
msg.setContent(mp);
msg.setSentDate(new Date());
//发送邮件
Transport.send(msg);
flag=true;
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
ex.printStackTrace();
}
flag=false;
}
return flag;
}
/**
* <br>
* 方法说明:把主题转换为中文 <br>
* 输入参数:String strText <br>
* 返回类型:
*/
public static String transferChinese(String strText) {
try {
strText = MimeUtility.encodeText(new String(strText.getBytes(),
"GB2312"), "GB2312", "B");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return strText;
}
/**
* 发送站内短信
* @param entity
* @return
*/
public static boolean sendSiteMessage(MessageEntity entity){
boolean flag=false;
//进行相关处理,进行发送站内短信
return flag;
}
/**
* <br>
* 方法说明:主方法,用于测试 <br>
* 输入参数: <br>
* 返回类型:
*/
public static void main(String[] args) {
// MailEntity entity=new MailEntity();
// entity.setHost("mail.nci.com.cn");
// entity.setUserName("anhk");
// entity.setPassWord("anhk.com");
// entity.setFrom("anhk@nci.com.cn");
// entity.setTo(new String[]{"jones.ahk@gmail.com","jones_ahk@yahoo.com.cn"});
// entity.setSubject("你好,这是sendmail测试!");
// entity.setContent("你好,这是留言测试中的发送邮件通知信息测试!");
//Mail sendmail = new
// Mail("dujiang@sricnet.com","du_jiang@sohu.com","smtp.sohu.com","du_jiang","31415926","你好","胃,你好吗?");
//sendmail.attachfile("c:\test.txt");
//sendmail.attachfile("DND.jar");
// sendMail(entity);
sendMessage("你好,这是sendmail测试!","你好,这是留言测试中的发送邮件通知信息测试!");
}
}
测试完毕
使用JavaMail接收邮件
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
/**
* <p>Title: 使用JavaMail接收邮件</p>
* <p>Description: 实例JavaMail包接收邮件,本实例没有实现接收邮件的附件。</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: POPMail.java</p>
* @version 1.0
*/
public class POPMail{
/**
*<br>方法说明:主方法,接收用户输入的邮箱服务器、用户名和密码
*<br>输入参数:
*<br>返回类型:
*/
public static void main(String args[]){
try{
String popServer=args[0];
String popUser=args[1];
String popPassword=args[2];
receive(popServer, popUser, popPassword);
}catch (Exception ex){
System.out.println("Usage: java com.lotontech.mail.POPMail" " popServer popUser popPassword");
}
System.exit(0);
}
/**
*<br>方法说明:接收邮件信息
*<br>输入参数:
*<br>返回类型:
*/
public static void receive(String popServer, String popUser, String popPassword){
Store store=null;
Folder folder=null;
try{
//获取默认会话
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, null);
//使用POP3会话机制,连接服务器
store = session.getStore("pop3");
store.connect(popServer, popUser, popPassword);
//获取默认文件夹
folder = store.getDefaultFolder();
if (folder == null) throw new Exception("No default folder");
//如果是收件箱
folder = folder.getFolder("INBOX");
if (folder == null) throw new Exception("No POP3 INBOX");
//使用只读方式打开收件箱
folder.open(Folder.READ_ONLY);
//得到文件夹信息,获取邮件列表
Message[] msgs = folder.getMessages();
for (int msgNum = 0; msgNum < msgs.length; msgNum ){
printMessage(msgs[msgNum]);
}
}catch (Exception ex){
ex.printStackTrace();
}
finally{
//释放资源
try{
if (folder!=null) folder.close(false);
if (store!=null) store.close();
}catch (Exception ex2) {
ex2.printStackTrace();
}
}
}
/**
*<br>方法说明:打印邮件信息
*<br>输入参数:Message message 信息对象
*<br>返回类型:
*/
public static void printMessage(Message message){
try{
//获得发送邮件地址
String from=((InternetAddress)message.getFrom()[0]).getPersonal();
if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();
System.out.println("FROM: " from);
//获取主题
String subject=message.getSubject();
System.out.println("SUBJECT: " subject);
//获取信息对象
Part messagePart=message;
Object content=messagePart.getContent();
//附件
if (content instanceof Multipart){
messagePart=((Multipart)content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
//获取content类型
String contentType=messagePart.getContentType();
//如果邮件内容是纯文本或者是HTML,那么打印出信息
System.out.println("CONTENT:" contentType);
if (contentType.startsWith("text/plain")||
contentType.startsWith("text/html")){
InputStream is = messagePart.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String thisLine=reader.readLine();
while (thisLine!=null){
System.out.println(thisLine);
thisLine=reader.readLine();
}
}
System.out.println("-------------- END ---------------");
}catch (Exception ex){
ex.printStackTrace();
}
}
}