最近项目中有用到系统自动给用户发邮件的功能,今天抽时间总结一下:
一、概述
使用Java发送邮件就要使用到JavaMail API,JavaMail API提供了一个独立于平台并且与协议无关的框架来构建邮件和消息传递应用程序。JavaMail API可用作与Java SE平台一起使用的可选软件包, 并且还包括在 Java EE平台中。
1、jar包准备
我所用到的jar包为:javax.mail-1.5.2.jar,网上资源很多,随便搜索下就能下载。
2、具体代码
(1)初始化加载配置信息
/**
* @author : hang.shao
* @description : 发送邮件测试
* @date : 2017年8月29日 下午4:30:05
* @version : 1.0
* @return :
*/
public class SendEmailTest {
// 邮件发送协议
private final static String PROTOCOL = "smtp";
// SMTP邮件服务器
private final static String HOST = "mail.cnpc.com.cn";
// SMTP邮件服务器默认端口
private final static String PORT = "25";
// 是否要求身份认证
private final static String IS_AUTH = "true";
// 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
private final static String IS_ENABLED_DEBUG_MOD = "true";
// 发件人
private static String from = "[email protected]";
private static String fromUserPassword = "123456";
// 初始化连接邮件服务器的会话信息
private static Properties props = null;
//初始化加载配置信息
static {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.smtp.host", HOST);
props.setProperty("mail.smtp.port", PORT);
props.setProperty("mail.smtp.auth", IS_AUTH);
props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
}
public static void main(String[] args) {
String emailAddress = "[email protected]";
String userName = "123456";
String password = "123456";
try{
SendEmailTest.sendTextEmail(emailAddress, 11111111);
//SendEmailTest.sendHtmlEmail(emailAddress, userName,password);
}catch(Exception e){
e.printStackTrace();
}
}
}
(2)向邮件服务器提交认证信息
static class MyAuthenticator extends Authenticator {
private String username = "hang.shao";
private String password = "123456";
public MyAuthenticator() {
super();
}
public MyAuthenticator(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
(3)发送简单的文本邮件
public static boolean sendTextEmail(String to,int code) throws Exception {
try {
// 创建Session实例对象
Session session = Session.getDefaultInstance(props);
InternetAddress fromAddress = new InternetAddress(from);
InternetAddress toAddress = new InternetAddress(to);
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
// 设置发件人
message.setFrom(fromAddress);
// 设置邮件主题
message.setSubject("测试邮件");
// 设置收件人
message.setRecipient(RecipientType.TO, toAddress);
// 设置发送时间
message.setSentDate(new Date());
// 设置纯文本内容为邮件正文
message.setText("您好:/t/n 这是测试邮件"+code+",请查收/t/n"
+ "如有问题请邮件联系。/t/n 此致 /t/n 敬礼");
// 保存并生成最终的邮件内容
message.saveChanges();
// 获得Transport实例对象
Transport transport = session.getTransport();
// 打开连接
transport.connect(from, fromUserPassword);
// 将message对象传递给transport对象,将邮件发送出去
transport.sendMessage(message, message.getAllRecipients());
// 关闭连接
transport.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
(4)发送简单的html邮件
public static boolean sendHtmlEmail(String to, String userName, String password) throws Exception {
System.out.println("-----------------"+to+"--"+userName+"--"+password);
// 创建Session实例对象
Session session = Session.getInstance(props, new MyAuthenticator());
InternetAddress fromAddress = new InternetAddress(from);
InternetAddress toAddress = new InternetAddress(to);
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
// 设置邮件主题
message.setSubject("你好,这是测试邮件");
// 设置发送人
message.setFrom(fromAddress);
// 设置发送时间
message.setSentDate(new Date());
// 设置收件人
message.setRecipient(RecipientType.TO, toAddress);
// 设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为gbk
message.setContent(""
+ "您好!这是测试邮件:
"
+ "此致
"
+ "敬礼!
"
+ "","text/html;charset=utf-8");
//设置自定义发件人昵称
String nick="shaohang";
try {
nick=javax.mail.internet.MimeUtility.encodeText("shaohang");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
message.setFrom(new InternetAddress(nick+" <"+from+">"));
// 保存并生成最终的邮件内容
message.saveChanges();
// 发送邮件
try {
Transport.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}