所有工具類
本文章向大家介紹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://m.eyofj.com">張軍個人網(wǎng)站</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); /** * 發(fā)送郵件 * * @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()); // 設置發(fā)信人 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()); // 設置發(fā)信時間 message.setSentDate(new Date()); // 發(fā)送郵件 Multipart mm = new MimeMultipart(); if (dto.getContentObj() == null) { dto.setContentObj(""); } BodyPart mdpContent = new MimeBodyPart(); // 添加內(nèi)容 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方式登錄郵箱,第一個參數(shù)是發(fā)送郵件用的郵件服務器SMTP地址,第二個參數(shù)為用戶名,第三個參數(shù)密碼 transport.connect(dto.getMailSmtpHost(), dto.getUser(), dto.getPassword()); // 發(fā)送郵件,其中第二個參數(shù)是所有已設好的收件人地址 transport.sendMessage(message, message.getAllRecipients()); transport.close(); logger.info("發(fā)送郵件成功"); return true; } catch (Exception e) { throw new ServiceException(e); } } }
email工具類參數(shù)
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工具類參數(shù)<br> * * @version 1.00 (2011/11/08) * @author 張軍 {@link <a target=_blank href="http://m.eyofj.com">張軍個人網(wǎng)站</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; /** * 發(fā)件人使用發(fā)郵件的電子信箱服務器,默認smtp.126.com */ private String mailSmtpHost; /** * 是否調(diào)試 */ private boolean debug; /** * 發(fā)送人郵箱地址 */ private String fromAddress; /** * 收件人郵箱地址(多個以;號隔開) */ private String toAddresses; /** * 密送人郵箱地址(多個以;號隔開) */ private String bccAddresses; /** * 抄送人郵箱地址(多個以;號隔開) */ private String ccAddresses; /** * 設置主題 */ private String subject; /** * 發(fā)送主體內(nèi)容 */ private Object contentObj; /** * 編碼,默認text/html;charset=UTF-8 */ private String contentType = "text/html;charset=UTF-8"; /** * 附件地址 */ private String fileDataSources; /** * 附件地址名 */ private String fileDataSourcesName; /** * 協(xié)議,默認smtp */ private String protocol = "smtp"; /** * 發(fā)送郵件用戶名 */ private String user; /** * 發(fā)送郵件密碼 */ private String password; // 屬性設置 private Map<String, Object> propertiesMap = new HashMap<String, Object>(); /** * 是否465端口發(fā)送 */ private boolean send465Port; /** * 自動設置用戶名 */ public void autoSetUser() { if (CheckUtil.isNull(user)) { // 設置用戶名 String[] userAry = JavaUtil.split(this.fromAddress, "@"); if (userAry.length > 0) { user = userAry[0]; } } } /** * 改成465端口發(fā)送 */ 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"; } // 設置發(fā)送郵件端口號 send465Port(); } } } } }
本文為張軍原創(chuàng)文章,轉載無需和我聯(lián)系,但請注明來自張軍的軍軍小站,個人博客http://m.eyofj.com
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
