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);
}
}