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();
主体代码如下(注释很详细):
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();
- JavaMail发邮件实战
- 用javamail发邮件
- JavaMail API发邮件
- javamail发邮件
- javaMail发邮件
- 用javamail 发邮件
- 用javamail 发邮件
- JAVAMAIL发邮件
- 用JAVAMAIL 发邮件
- javamail发邮件
- javamail读发邮件
- javamail发邮件异常
- javamail发邮件乱码
- javamail 发邮件 附件
- javamail发邮件
- javamail发邮件全过程
- javaMail发邮件demo
- javamail发( 收)邮件
- 14-2形状类族中的纯虚函数
- 防SQL注入函数群
- 第十三周项目二
- 单层感知器
- 14周项目一.3(动物怎么叫)
- JavaMail发邮件实战
- 最新c#开源项目
- 一键删除svn文件
- 第14周-项目1-Animal
- PHP漏洞全解(一)-PHP网页的安全性问题
- 第十四周项目二——图形类集锦
- 只有独立显卡(Nvidia GT640)的机器安装Ubuntu13.04黑屏
- 关于禁用回车键事件
- 我见过的最猛的sql