com.lazydsr.util.mail.UtilMail Maven / Gradle / Ivy
package com.lazydsr.util.mail;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
* UtilMail
* PROJECT_NAME: lazy
* PACKAGE_NAME: com.lazy.com.lazydsr.util.UtilMail
* Created by Lazy on 2017/5/13 20:16
* Version: 0.1
* Info: mail工具类
*/
public class UtilMail {
private String host = "";
private String username = "";
private String password = "";
private transient Properties properties;
private transient MailAuthenticator mailAuthenticator;
private transient Session session;
//发送者昵称
private String senderName;
//是否开启Debug模式
private boolean isDebug = false;
//是否使用加密模式
private boolean isTLS = false;
//是否显示邮件内容
private boolean showContent;
/**
* 从本地WEB-INF下的classes/prop文件夹中取配置文件Mail.pro
*/
private UtilMail() {
//从本地配置文件中取参数
}
/**
* 有参构造
*
* @param host 类似xxx.xxx.com
* @param username 用户名 类似xxx,不需要加@xxx.xxx.com
* @param password 密码
*/
public UtilMail(String host, String username, String password) {
this.host = host;
this.username = username;
this.password = password;
//初始化发件服务器
init();
}
/**
* 有参构造
*
* @param host 类似xxx.xxx.com
* @param username 用户名 类似xxx,不需要加@xxx.xxx.com
* @param password 密码
* @param isTLS 是否启用TLS
*/
public UtilMail(String host, String username, String password, boolean isTLS) {
this.host = host;
this.username = username;
this.password = password;
this.isTLS = isTLS;
//初始化发件服务器
init();
}
/**
* 邮件服务器初始化
*/
private void init() {
//初始化property
properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", isTLS ? "true" : "false");
//验证
mailAuthenticator = new MailAuthenticator(username, password);
//创建Session
session = Session.getInstance(properties, mailAuthenticator);
}
/**
* 邮件发送----单个接收人
*
* @param recipient 接收人
* @param subject 主题
* @param content 内容
* @param files 附件
* @return 结果:true 成功,false 失败
*/
public boolean send(String recipient, String subject, String content, String... files) {
List recipients = new ArrayList();
recipients.add(recipient);
return send(recipients, null, null, subject, content, files);
}
/**
* 邮件发送----多个接收人
*
* @param recipients 接收人
* @param subject 主题
* @param content 内容
* @param files 附件
* @return 结果:true 成功,false 失败
*/
public boolean send(List recipients, String subject, String content, String... files) {
return send(recipients, null, null, subject, content, files);
}
/**
* 邮件发送----单个接收人和一个抄送人
*
* @param recipient 接收人
* @param CCUser 抄送人
* @param subject 主题
* @param content 内容
* @param files 附件
* @return 结果:true 成功,false 失败
*/
public boolean send(String recipient, String CCUser, String subject, String content, String[] files) {
List recipients = new ArrayList();
recipients.add(recipient);
List CCUsers = new ArrayList();
CCUsers.add(CCUser);
return send(recipients, CCUsers, null, subject, content, files);
}
/**
* 邮件发送----单个接收人、一个抄送人和一个密送人
*
* @param recipient 接收人
* @param CCUser 抄送人
* @param CCUser 密送人
* @param BCCUser 主题
* @param content 内容
* @param files 附件
* @return 结果:true 成功,false 失败
*/
public boolean send(String recipient, String CCUser, String BCCUser, String subject, String content, String[] files) {
List recipients = new ArrayList();
recipients.add(recipient);
List CCUsers = new ArrayList();
CCUsers.add(CCUser);
List BCCUsers = new ArrayList();
BCCUsers.add(BCCUser);
return send(recipients, CCUsers, BCCUsers, subject, content, files);
}
/**
* 邮件发送----多个接收人----自定义发件人显示名称
*
* @param recipients 接收人
* @param CCUsers 抄送人
* @param BCCUsers 密送人
* @param subject 主题
* @param content 内容
* @param files 附件
* @return 结果:true 成功,false 失败
*/
public boolean send(List recipients, List CCUsers, List BCCUsers, String subject, String content, String... files) {
//设置是否启用Debug模式
session.setDebug(isDebug);
boolean result = false;
// 创建mime类型邮件
MimeMessage message = new MimeMessage(session);
try {
message.addHeader("charset", "UTF-8");
// 设置发信人
if (senderName == null || "".equals(senderName.trim()))
message.setFrom(new InternetAddress(mailAuthenticator.getUsername()));
else
message.setFrom(new InternetAddress(mailAuthenticator.getUsername(), senderName));
//设置发件人
if (recipients == null || recipients.size() == 0) {
System.out.println("发件人为空");
return false;
}
int num = recipients.size();
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; i++) {
addresses[i] = new InternetAddress(recipients.get(i));
}
message.setRecipients(Message.RecipientType.TO, addresses);
//设置抄送人
if (CCUsers != null && CCUsers.size() > 0) {
int CCnum = CCUsers.size();
InternetAddress[] CCaddresses = new InternetAddress[CCnum];
for (int i = 0; i < CCnum; i++) {
CCaddresses[i] = new InternetAddress(CCUsers.get(i));
}
message.setRecipients(Message.RecipientType.CC, CCaddresses);
}
//设置密送人
if (BCCUsers != null && BCCUsers.size() > 0) {
int BCCnum = BCCUsers.size();
InternetAddress[] BCCaddresses = new InternetAddress[BCCnum];
for (int i = 0; i < BCCnum; i++) {
BCCaddresses[i] = new InternetAddress(BCCUsers.get(i));
}
message.setRecipients(Message.RecipientType.CC, BCCaddresses);
}
//设置发送时间
Date date = new Date();
message.setSentDate(date);
// 设置主题
message.setSubject(MimeUtility.encodeText(subject, "UTF-8", "B"));
/*添加正文内容*/
Multipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(content, "text/html; charset=UTF-8");
contentPart.setHeader("Content-Type", "text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);
for (String file : files) {
File usFile = new File(file);
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new FileDataSource(file);
fileBody.setDataHandler(new DataHandler(source));
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
fileBody.setFileName("=?GBK?B?"
+ enc.encode(usFile.getName().getBytes()) + "?=");
multipart.addBodyPart(fileBody);
}
message.setContent(multipart);
message.saveChanges();
// 发送
Transport.send(message);
//打印邮件内容
if (showContent) {
System.out.println("收件人:" + recipients.toString() + ",发送时间:" + date + ",邮件主题:" + subject + ",邮件内容:" + content.toString());
}
result = true;
} catch (AuthenticationFailedException e) {
System.out.println("发件人账户验证错误" + e);
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
System.out.println("发件人地址错误");
e.printStackTrace();
} catch (MessagingException e) {
System.out.println("邮件体错误");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isDebug() {
return isDebug;
}
public void setDebug(boolean debug) {
isDebug = debug;
}
public boolean isTLS() {
return isTLS;
}
public void setTLS(boolean TLS) {
isTLS = TLS;
}
public boolean isShowContent() {
return showContent;
}
public void setShowContent(boolean showContent) {
this.showContent = showContent;
}
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
class MailAuthenticator extends Authenticator {
private String username;
private String password;
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
public MailAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy