所有工具類
本文章向大家介紹EmailUtil,主要包括EmailUtil使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
package zj.email.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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;
import org.apache.log4j.Logger;
import zj.check.util.CheckUtil;
import zj.common.exception.ServiceException;
import zj.email.bean.EmailDto;
import zj.java.util.JavaUtil;
/**
* 概況 :EmailUtil工具類<br>
*
* @version 1.00 (2011.12.02)
* @author SHNKCS 張軍 {@link <a target=_blank href="http://www.dlhighland.cn">張軍個人網站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>} <br>
*/
public class EmailUtil {
private static Logger logger = Logger.getLogger(EmailUtil.class);
/**
* 發送郵件
*
* @param dto
*/
public static boolean sendEmail(EmailDto dto) {
try {
Properties props = new Properties();
props.put("mail.smtp.host", dto.getMailSmtpHost());
props.put("mail.smtp.auth", "true");
// 使用 STARTTLS安全連接:
// props.setProperty("mail.smtp.port", "465");
// props.setProperty("mail.smtp.starttls.enable", "true");
// props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
// props.setProperty("mail.smtp.socketFactory.fallback", "false");
if (dto.getPropertiesMap() != null && dto.getPropertiesMap().size() > 0) {
props.putAll(dto.getPropertiesMap());
}
// 郵件會話類Session,跟httpSession類似。傳入屬性設置properties和授權驗證對象
Session session = null;
// 無授權驗證
session = Session.getInstance(props);
// 授權驗證
// SmtpAuth auth = new SmtpAuth();
// auth.setUser(dto.getUser());
// auth.setPassword(dto.getPassword());
// session = Session.getInstance(props, auth);
session.setDebug(dto.isDebug());
// 由郵件會話新建一個消息對象
MimeMessage message = new MimeMessage(session);
InternetAddress from = new InternetAddress(dto.getFromAddress());
// 設置發信人
message.setFrom(from);
// 設置收信人
if (CheckUtil.isNotNull(dto.getToAddresses())) {
String[] sary = JavaUtil.split(dto.getToAddresses(), ";");
List<String> emails = new ArrayList<String>();
for (int i = 0; i < sary.length; i++) {
if (CheckUtil.isEmail(sary[i])) {
emails.add(sary[i]);
} else {
logger.warn("無效的收件人郵件地址:" + sary[i]);
}
}
if (emails.size() > 0) {
Address[] addressAry = new InternetAddress[emails.size()];
for (int i = 0; i < emails.size(); i++) {
String email = emails.get(i);
addressAry[i] = new InternetAddress(email);
}
message.setRecipients(Message.RecipientType.TO, addressAry);
} else {
throw new ServiceException("驗證所有收件人失敗,收件人至少有一個人");
}
} else {
throw new ServiceException("收件人至少有一個人");
}
// 設置抄送人
if (CheckUtil.isNotNull(dto.getCcAddresses())) {
String[] sary = JavaUtil.split(dto.getCcAddresses(), ";");
List<String> emails = new ArrayList<String>();
for (int i = 0; i < sary.length; i++) {
if (CheckUtil.isEmail(sary[i])) {
emails.add(sary[i]);
} else {
logger.warn("無效的抄送人郵件地址:" + sary[i]);
}
}
if (emails.size() > 0) {
Address[] addressAry = new InternetAddress[emails.size()];
for (int i = 0; i < emails.size(); i++) {
String email = emails.get(i);
addressAry[i] = new InternetAddress(email);
}
message.setRecipients(Message.RecipientType.CC, addressAry);
}
}
// 設置密送人
if (CheckUtil.isNotNull(dto.getBccAddresses())) {
String[] sary = JavaUtil.split(dto.getBccAddresses(), ";");
List<String> emails = new ArrayList<String>();
for (int i = 0; i < sary.length; i++) {
if (CheckUtil.isEmail(sary[i])) {
emails.add(sary[i]);
} else {
logger.warn("無效的密送人郵件地址:" + sary[i]);
}
}
if (emails.size() > 0) {
Address[] addressAry = new InternetAddress[emails.size()];
for (int i = 0; i < emails.size(); i++) {
String email = emails.get(i);
addressAry[i] = new InternetAddress(email);
}
message.setRecipients(Message.RecipientType.BCC, addressAry);
}
}
// 設置主題
message.setSubject(dto.getSubject());
// 設置發信時間
message.setSentDate(new Date());
// 發送郵件
Multipart mm = new MimeMultipart();
if (dto.getContentObj() == null) {
dto.setContentObj("");
}
BodyPart mdpContent = new MimeBodyPart();
// 添加內容
mdpContent.setContent(dto.getContentObj(), dto.getContentType());
mm.addBodyPart(mdpContent);
// 添加附件
if (CheckUtil.isNotNull(dto.getFileDataSources())) {
String[] sary = JavaUtil.split(dto.getFileDataSources(), ";");
String[] saryName = JavaUtil.split(dto.getFileDataSourcesName(), ";");
for (int i = 0; i < sary.length; i++) {
FileDataSource fdsFile = new FileDataSource(sary[i]);
DataHandler dh = new DataHandler(fdsFile);
BodyPart mdpAttachment = new MimeBodyPart();
String fileName = null;
if (saryName.length > i) {
fileName = saryName[i];
}
if (CheckUtil.isNull(fileName)) {
fileName = fdsFile.getName();
}
mdpAttachment.setFileName(MimeUtility.encodeWord(fileName));
mdpAttachment.setDataHandler(dh);
mm.addBodyPart(mdpAttachment);
}
}
message.setContent(mm);
// 保存改變
message.saveChanges();
// ****************************************************//
Transport transport = session.getTransport(dto.getProtocol());
// 以smtp方式登錄郵箱,第一個參數是發送郵件用的郵件服務器SMTP地址,第二個參數為用戶名,第三個參數密碼
transport.connect(dto.getMailSmtpHost(), dto.getUser(), dto.getPassword());
// 發送郵件,其中第二個參數是所有已設好的收件人地址
transport.sendMessage(message, message.getAllRecipients());
transport.close();
logger.info("發送郵件成功");
return true;
} catch (Exception e) {
throw new ServiceException(e);
}
}
}email工具類參數
package zj.email.bean;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import lombok.Data;
import zj.check.util.CheckUtil;
import zj.java.util.JavaUtil;
/**
* email工具類參數<br>
*
* @version 1.00 (2011/11/08)
* @author 張軍 {@link <a target=_blank href="http://www.dlhighland.cn">張軍個人網站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
*/
@Data
public class EmailDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 發件人使用發郵件的電子信箱服務器,默認smtp.126.com
*/
private String mailSmtpHost;
/**
* 是否調試
*/
private boolean debug;
/**
* 發送人郵箱地址
*/
private String fromAddress;
/**
* 收件人郵箱地址(多個以;號隔開)
*/
private String toAddresses;
/**
* 密送人郵箱地址(多個以;號隔開)
*/
private String bccAddresses;
/**
* 抄送人郵箱地址(多個以;號隔開)
*/
private String ccAddresses;
/**
* 設置主題
*/
private String subject;
/**
* 發送主體內容
*/
private Object contentObj;
/**
* 編碼,默認text/html;charset=UTF-8
*/
private String contentType = "text/html;charset=UTF-8";
/**
* 附件地址
*/
private String fileDataSources;
/**
* 附件地址名
*/
private String fileDataSourcesName;
/**
* 協議,默認smtp
*/
private String protocol = "smtp";
/**
* 發送郵件用戶名
*/
private String user;
/**
* 發送郵件密碼
*/
private String password;
// 屬性設置
private Map<String, Object> propertiesMap = new HashMap<String, Object>();
/**
* 是否465端口發送
*/
private boolean send465Port;
/**
* 自動設置用戶名
*/
public void autoSetUser() {
if (CheckUtil.isNull(user)) {
// 設置用戶名
String[] userAry = JavaUtil.split(this.fromAddress, "@");
if (userAry.length > 0) {
user = userAry[0];
}
}
}
/**
* 改成465端口發送
*/
private void send465Port() {
if (isSend465Port()) {
propertiesMap.put("mail.smtp.port", "465");
propertiesMap.put("mail.smtp.starttls.enable", "true");
propertiesMap.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
propertiesMap.put("mail.smtp.socketFactory.fallback", "false");
}
}
/**
* 自動設置服務器
*/
public void autoSetMailSmtpHost() {
if (CheckUtil.isNull(mailSmtpHost)) {
String[] userAry = JavaUtil.split(this.fromAddress, "@");
if (userAry.length > 1) {
String hosts[] = JavaUtil.split(userAry[1], ".");
if (hosts.length > 0) {
String host = hosts[0];
if ("qq".equalsIgnoreCase(host) || "allianity".equalsIgnoreCase(host)) {
mailSmtpHost = "smtp.qq.com";
} else if ("yahoo".equalsIgnoreCase(host)) {
mailSmtpHost = "smtp.mail.yahoo.com.cn";
} else if ("163".equalsIgnoreCase(host)) {
mailSmtpHost = "smtp.163.com";
} else if ("126".equalsIgnoreCase(host)) {
mailSmtpHost = "smtp.126.com";
} else if ("notice".equalsIgnoreCase(host)) {
mailSmtpHost = "smtpdm.aliyun.com";
} else {
mailSmtpHost = "smtp.126.com";
}
// 設置發送郵件端口號
send465Port();
}
}
}
}
}
本文為張軍原創文章,轉載無需和我聯系,但請注明來自張軍的軍軍小站,個人博客http://www.dlhighland.cn
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

