JavaMail发邮件实战

来源:互联网 发布:doc软件官方下载 编辑:程序博客网 时间:2024/05/21 19:28
公司的issue(我们公司分派任务是以issue的形式)有一个任务,要完成新用户注册邮件通知的功能,借此机会,学习了下通过javaMail发邮件的整个实现过程,便写此文,与大家同享。
  主体代码如下(注释很详细):
package com.huaat.weibo.common.utils;

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.log4j.Logger;


/////////////////////////
//电子邮件发送主代码
//
/////////////////////////
public class SendEmail{
// log4j日志
private static final Logger logger = Logger.getLogger(SendEmail.class);


public void sendEmail(String [] emailReceiver, String emailSubject,
String emailContent) {
try {
//由于我是用属性文件配置的发件人,主机等信息,故写了一个PropertyUtil类,用 //于读取属性文件。PropertyUtil类的代码下文将给出


PropertyUtil propUtil=new PropertyUtil();
//属性文件
   String configFilePath = SendEmail.class.getResource("/config/javaMail.properties").getPath();      Properties prop=propUtil.getProperties(configFilePath);
String host = prop.getProperty("host");


//获得系统属性对象
Properties properties = System.getProperties();


// 设置SMTP服务器
properties.setProperty("mail.smtp.host", host);


// 验证SMTP
properties.put("mail.smtp.auth", prop.getProperty("isAuth"));


Session session = Session.getInstance(properties);
// 查看运行时信息
//session.setDebug(true);
// 由邮件Session新建一个消息对象
MimeMessage mimeMessage = new MimeMessage(session);
// 发件人
InternetAddress from = new InternetAddress(prop.getProperty("from"));
mimeMessage.setFrom(from);


// 收件人
InternetAddress [] to = new InternetAddress[emailReceiver.length];
for(int i = 0; i < emailReceiver.length; i++ ){
to[i] = new InternetAddress(emailReceiver[i]);
}
mimeMessage.setRecipients(Message.RecipientType.TO, to);


// 邮件标题
mimeMessage.setSubject(emailSubject);
// 邮件内容及编码
mimeMessage.setContent(emailContent, "text/html;charset=GB2312");
// 保存
mimeMessage.saveChanges();
Transport transport = session.getTransport("smtp");
// smtp验证(用户名,密码登录邮件服务器验证)
transport.connect(host,prop.getProperty("userName"),prop.getProperty("pass"));
// 发送
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
transport.close();
logger.info("SendEmail - sendEmail SUCCESS !!!");
} catch (Exception e) {
logger.error("SendEmail - sendEmail Error !!!",e);
}
}



//测试用
public static void main(String[] args) {
SendEmail  se = new SendEmail();
String tos = {xyw19870915@gmail.com,459745719@qq.com};
se.sendEmail(tos,"注册通知","我是新用户");


}
}




/////////////////////////
//读取属性文件工具类
//
/////////////////////////
package com.huaat.weibo.common.utils;


import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Locale;
import java.util.Properties;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;


public class PropertyUtil {
    // log4j日志
    private static final Logger logger = Logger.getLogger(PropertyUtil.class);


    public Properties getProperties(String file){
        Properties prop=null;
        try {
            BufferedInputStream is=new BufferedInputStream(new FileInputStream(file));
            prop=new Properties();
            prop.load(is);
        } catch (FileNotFoundException e) {
        logger.info("File Not Found!");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return prop;
    }


    public ResourceBundle resourceBundle(String file){
        ResourceBundle res=ResourceBundle.getBundle(file,Locale.getDefault());
        return res;
        }


    public PropertyResourceBundle propResourceBundle(String file){
        BufferedInputStream bis;
        PropertyResourceBundle prs = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(file));
            prs=new PropertyResourceBundle(bis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return prs;
    }
}




/////////////////////////
//属性文件javaMail.properties(配置发送邮件时需读取的信息)
//
/////////////////////////


#主机(主机的配置和发件人的邮箱要一致)
host=smtp.163.com
#发件人
from=xyw19870915@163.com
#发件人用户名和密码
userName=xyw19870915
pass=******


#收件人(如果多个收件人,以“,”分隔)
tos=459745719@qq.com,warren0915@163.com
#默认邮件标题
defaulSubject=微博营销平台新用户登录系统邮件
#默认邮件内容
defaultContent=我是微博营销平台的新用户
#是否验证SMTP
isAuth=true


/////////////////////////
//总结及注意事项
//
/////////////////////////


注意:
1,笔者在完成功能时,常报一些莫名的错误,需导入两个包activation.jar和mail.jar后解决
2,邮件发件人和主机要对应。如,发件人为xyw19870915@163.com,主机对应为smtp.163.com,
发件人为459745719@qq.com,主机对应为smtp.qq.com
3,如果报FileNotFound Exception,则说明没找到属性文件,可以在网上搜下解决这个问题的方法。笔者的
开发环境为eclipse,属性文件javaMail.properties放在src/config目录下,读取方式采用的是 String configFilePath = SendEmail.class.getResource("/config/javaMail.properties").getPath();