package com.yuxinglab.utils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.internet.MimeMessage; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; /** * 邮件发送工具类 * * @author yuxing * */ public class EmailUtils { // 发件人邮箱服务器 private String emailHost; // 发件人邮箱 private String emailFrom; // 发件人用户名 private String emailUserName; // 发件人密码 private String emailPassword; // 收件人邮箱,支持多个邮箱,以";"分割 private String toEmails; // 邮件主题 private String subject; // 邮件内容 private String content; // 邮件中的图片,key为图片Id,value为图片地址 private Map<String, String> pictures; // 邮件中的附件,key为附件Id,value为附件地址 private Map<String, String> attachments; public String getEmailHost() { if (null == emailHost || emailHost.trim().equals("")) { return ""; } return emailHost.trim(); } public void setEmailHost(String emailHost) { this.emailHost = emailHost; } public String getEmailFrom() { if (null == emailFrom || emailFrom.trim().equals("")) { return ""; } return emailFrom; } public void setEmailFrom(String emailFrom) { this.emailFrom = emailFrom; } public String getEmailUserName() { if (null == emailUserName || emailUserName.trim().equals("")) { return ""; } return emailUserName; } public void setEmailUserName(String emailUserName) { this.emailUserName = emailUserName; } public String getEmailPassword() { if (null == emailPassword || emailPassword.trim().equals("")) { return ""; } return emailPassword; } public void setEmailPassword(String emailPassword) { this.emailPassword = emailPassword; } public String getToEmails() { if (null == toEmails || toEmails.trim().equals("")) { return ""; } return toEmails; } public void setToEmails(String toEmails) { this.toEmails = toEmails; } public String getSubject() { if (null == subject || subject.trim().equals("")) { return "无主题" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date()); } return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { if (null == content || content.trim().equals("")) { return "无正文" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date()); } return content; } public void setContent(String content) { this.content = content; } public Map<String, String> getPictures() { return pictures; } public void setPictures(Map<String, String> pictures) { this.pictures = pictures; } public Map<String, String> getAttachments() { return attachments; } public void setAttachments(Map<String, String> attachments) { this.attachments = attachments; } public void sendEmail() throws MessagingException { if (this.getEmailHost().equals("") || this.getEmailFrom().equals("") || this.getEmailUserName().equals("") || this.getEmailPassword().equals("")) { throw new RuntimeException("发信人信息配置不足,请确认"); } JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); // 设置邮件的发信服务器 senderImpl.setHost(emailHost); MimeMessage message = senderImpl.createMimeMessage(); // 建立邮件消息 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8"); // 设置发信人邮箱 messageHelper.setFrom(emailFrom); // 设置收信人邮箱 String[] toEmailAddress = toEmails.split(";"); List<String> toEmailList = new ArrayList<>(); if (null == toEmailAddress || toEmailAddress.length < 1) { throw new RuntimeException("收信人邮箱为空!"); } else { for (String address : toEmailAddress) { if (null != address && !address.trim().equals("")) { toEmailList.add(address); } } if (null == toEmailList || toEmailList.size() < 1) { throw new RuntimeException("收信人邮箱为空!"); } else { toEmailAddress = new String[toEmailList.size()]; for (int i = 0; i < toEmailList.size(); i++) { toEmailAddress[i] = toEmailList.get(i); } } } // 收信人数组 messageHelper.setTo(toEmailAddress); // 发信主题 messageHelper.setSubject(subject); // 支持HTML格式正文 messageHelper.setText(content, true); // 添加图片 if (null != pictures) { for (Iterator<Map.Entry<String, String>> it = pictures.entrySet() .iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); String cid = entry.getKey(); String filePath = entry.getValue(); if (null == cid || null == filePath) { throw new RuntimeException("图片的ID和路径不全"); } java.io.File file = new java.io.File(filePath); if (!file.exists()) { throw new RuntimeException("图片:" + filePath + "不存在"); } FileSystemResource img = new FileSystemResource(file); messageHelper.addInline(cid, img); } } // 添加附件 if (null != attachments) { for (Iterator<Map.Entry<String, String>> it = attachments .entrySet().iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); String cid = entry.getKey(); String filePath = entry.getValue(); if (null == cid || null == filePath) { throw new RuntimeException("请确认每个附件的ID和地址是否齐全!"); } java.io.File file = new java.io.File(filePath); if (!file.exists()) { throw new RuntimeException("附件" + filePath + "不存在!"); } FileSystemResource fileResource = new FileSystemResource(file); messageHelper.addAttachment(cid, fileResource); } } Properties prop = new Properties(); prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确 prop.put("mail.smtp.timeout", "25000"); // 添加验证 YuXingAuthenticator auth=new YuXingAuthenticator(emailUserName, emailPassword); Session session = Session.getDefaultInstance(prop, auth); senderImpl.setSession(session); // 发送邮件 senderImpl.send(message); } public static void main(String[] args) throws Exception { EmailUtils mu = new EmailUtils(); // test1(mu); // test2(mu); // test3(mu); // test4(mu); // test5(mu); test1(mu); } public static void test1(EmailUtils mu) throws Exception { String toEmails = ""; mu.setEmailFrom(""); mu.setEmailHost("smtp.sina.com"); mu.setEmailUserName(""); mu.setEmailPassword(""); String subject = "邮件"; Map<String, String> attachments = new HashMap<String, String>(); attachments.put("Hibernate3.1_DOC_CN", "C:/Users/yuxing/Desktop/Hibernate3.1_DOC_CN.chm"); Map<String, String> pictures = new HashMap<String, String>(); pictures.put("d2", "C:/Users/yuxing/Desktop/QQ截图20140716165755.png"); StringBuilder builder = new StringBuilder(); builder.append("<html><body>图片展示<br />"); builder.append("<img src=\"cid:d2\" /><br />"); builder.append("</body></html>"); String content = builder.toString(); mu.setToEmails(toEmails); mu.setSubject(subject); mu.setContent(content); mu.setPictures(pictures); mu.setAttachments(attachments); mu.sendEmail(); } }
package com.yuxinglab.utils; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * * @author yuxing * @date 2012-5-8 下午2:48:25 */ public class YuXingAuthenticator extends Authenticator { private String username; private String password; /** * * @author geloin * @date 2012-5-8 下午2:48:53 * @param username * @param password */ public YuXingAuthenticator(String username, String password) { super(); this.username = username; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }