导入相关的jar包
<!-- Mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
package com.hj.project.util;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 邮件
* @Author: hj
* @Date: 17:17 2017/10/25
*/
public class MailMessage {
private static final String DEFAULT_SUBJECT = "无主题";
private static final String DEFAULT_CONTENT = "无邮件内容";
private static final String DEFAULT_FROMNAME = "未知用户";
private static final String DEFAULT_FILENAME = "未知文件名";
private List<InternetAddress> toUsers; // 接收人
private List<InternetAddress> ccUsers; // 抄送人
private List<InternetAddress> bccUsers; // 密送人
private String fromName; //发件人名称
private String subject; // 邮件主题
private String content; // 邮件内容
private String authUser; // 发送用户的用户名验证
private String authPassword; // 发送用户的密码验证
private String smtpHost; // smtp邮件服务器
private Integer port; // smtp邮件服务器端口
private Boolean isEnclosure; //是否有附件
private Boolean isCC; //是否有抄送人
private Boolean isBCC; //是否有密送人
private List<Map<String,String>> annexs; //附件列表
public MailMessage(){
isBCC = false;
isCC = false;
isEnclosure = false;
this.port = 25;
}
public MailMessage addAnnexs(String annex,String filename){
if(StringUtils.isEmpty(annex)){
return this;
}
if(StringUtils.isEmpty(filename)){
filename = DEFAULT_FILENAME;
}
if(CollectionUtils.isEmpty(annexs)){
annexs = new ArrayList<>();
}
Map<String,String> map = new HashMap<>();
map.put("fileName",filename);
map.put("filePath",annex);
annexs.add(map);
if(annexs.size() > 0){
isEnclosure = true;
}
return this;
}
public MailMessage fromName(String fromName){
if(StringUtils.isEmpty(fromName)){
this.fromName = DEFAULT_FROMNAME;
}else{
this.fromName = fromName;
}
return this;
}
public MailMessage port(Integer port) {
if (port != null) {
this.port = port;
}
return this;
}
public MailMessage to(String to) throws AddressException {
if (StringUtils.isEmpty(to)) {
return this;
}
if (CollectionUtils.isEmpty(toUsers)) {
toUsers = new ArrayList<>();
}
toUsers.add(new InternetAddress(to));
return this;
}
public MailMessage bcc(String bcc) throws AddressException {
if (StringUtils.isEmpty(bcc)) {
return this;
}
if (CollectionUtils.isEmpty(bccUsers)) {
bccUsers = new ArrayList<>();
}
bccUsers.add(new InternetAddress(bcc));
if(bccUsers.size() > 0){
isBCC = true;
}
return this;
}
public MailMessage cc(String cc) throws AddressException {
if (StringUtils.isEmpty(cc)) {
return this;
}
if (CollectionUtils.isEmpty(ccUsers)) {
ccUsers = new ArrayList<>();
}
ccUsers.add(new InternetAddress(cc));
if(ccUsers.size() > 0){
isCC = true;
}
return this;
}
public MailMessage subject(String subject) {
if (StringUtils.isEmpty(subject)) {
this.subject = DEFAULT_SUBJECT;
} else {
this.subject = subject;
}
return this;
}
public MailMessage content(String content) {
if (StringUtils.isEmpty(content)) {
this.content = DEFAULT_CONTENT;
} else {
this.content = content;
}
return this;
}
public MailMessage authUser(String authUser) {
this.authUser = authUser;
return this;
}
public MailMessage authPassword(String authPassword) {
this.authPassword = authPassword;
return this;
}
public MailMessage smtpHost(String smtpHost) {
this.smtpHost = smtpHost;
return this;
}
public Boolean getBCC() {
return isBCC;
}
public Boolean getCC() {
return isCC;
}
public List<InternetAddress> getBccUsers() {
return bccUsers;
}
public Boolean getEnclosure() {
return isEnclosure;
}
public String getFromName() {
return fromName;
}
public List<InternetAddress> getToUsers() {
return toUsers;
}
public List<InternetAddress> getCcUsers() {
return ccUsers;
}
public String getSubject() {
return subject;
}
public String getContent() {
return content;
}
public String getAuthUser() {
return authUser;
}
public String getAuthPassword() {
return authPassword;
}
public String getSmtpHost() {
return smtpHost;
}
public Integer getPort() {
return port;
}
public List<Map<String, String>> getAnnexs() {
return annexs;
}
}
package com.hj.project.util;
import org.springframework.util.StringUtils;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* @Description: 邮件发送工具包
* @Author: hj
* @Date: 17:10 2017/10/25
*/
public class MailUtil {
public Properties getProperties(String smtpHost,Integer port){
Properties props = new Properties();
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.port", port);
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
return props;
}
public void sendMail(MailMessage mailMessage) throws MessagingException, UnsupportedEncodingException {
if(StringUtils.isEmpty(mailMessage.getAuthUser())){
throw new RuntimeException("邮件用户权限不能为空");
}
if(StringUtils.isEmpty(mailMessage.getAuthPassword())){
throw new RuntimeException("邮件密码权限不能为空");
}
if(StringUtils.isEmpty(mailMessage.getToUsers())){
throw new RuntimeException("邮件接收列表不能为空");
}
if(StringUtils.isEmpty(mailMessage.getSmtpHost())){
throw new RuntimeException("邮件用户地址不能为空");
}
Session session = Session.getInstance(getProperties(mailMessage.getSmtpHost(),mailMessage.getPort()));
Transport ts = session.getTransport();
ts.connect(mailMessage.getSmtpHost(), mailMessage.getAuthUser(), mailMessage.getAuthPassword());
Message message = createMail(session,mailMessage);
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
/**
* @Description: 创建一封邮件
* @Author: hj
* @Date: 9:43 2017/10/26
*/
public static MimeMessage createMail(Session session,MailMessage mailMessage) throws MessagingException, UnsupportedEncodingException {
//创建邮件
MimeMessage message = new MimeMessage(session);
//设置发送人,发送人名称
message.setFrom(new InternetAddress(mailMessage.getAuthUser(),mailMessage.getFromName()));
//设置接收人列表
InternetAddress[] toUsers = new InternetAddress[mailMessage.getToUsers().size()];
mailMessage.getToUsers().toArray(toUsers);
message.setRecipients(Message.RecipientType.TO,toUsers);
//设置抄送人列表
if(mailMessage.getCC()){ //是否有抄送人
InternetAddress[] ccUsers = new InternetAddress[mailMessage.getCcUsers().size()];
mailMessage.getCcUsers().toArray(ccUsers);
message.setRecipients(Message.RecipientType.CC,ccUsers);
}
//设置密送人列表
if(mailMessage.getBCC()){ //是否有密送人
InternetAddress[] bccUsers = new InternetAddress[mailMessage.getBccUsers().size()];
mailMessage.getBccUsers().toArray(bccUsers);
message.setRecipients(Message.RecipientType.BCC,bccUsers);
}
//设置标题
message.setSubject(mailMessage.getSubject());
//设置正文
MimeMultipart body = new MimeMultipart();
MimeBodyPart content = new MimeBodyPart();
content.setContent(mailMessage.getContent(),"text/html;charset=utf-8");
body.addBodyPart(content);
if(mailMessage.getEnclosure()){ //是否存在附件
List<Map<String, String>> annexs = mailMessage.getAnnexs();
for(Map<String,String> annexMap : annexs){
MimeBodyPart annex = new MimeBodyPart();
DataHandler dh1 = new DataHandler(new FileDataSource(new File(annexMap.get("filePath"))));
annex.setDataHandler(dh1);
annex.setFileName(annexMap.get("fileName"));
body.addBodyPart(annex);
}
body.setSubType("mixed");
}
message.setContent(body);
message.saveChanges(); //保存修改
return message;
}
}
实用起来非常简单,支持多人抄送,多人密送,多个附件功能
try {
MailUtil mailUtil = new MailUtil();
MailMessage mailMessage = new MailMessage();
mailMessage.authUser("13635928060@163.com") //设置发送人
.authPassword("xxxxxx") //设置密码
.smtpHost("smtp.163.com") //设置发送人服务器地址
.fromName("你要吃瓜吗") //设置发送人名字
.content("<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />" +
"</head><body><h1>hello!!spring image html mail</h1>" +
"<img src='http://mpic.tiankong.com/177/aa6/177aa61e247db0bae6b904378029536a/640.jpg'/>" +
"</body></html>") //设置发送内容
.subject("主题") //设置主题
.to("1562187458@qq.com") //设置接收人
.cc("13635928060@163.com") //设置抄送人
.bcc("hj@pamocloud.com") //设置密送人
.addAnnexs("A:\\image\\link.jpg","link.jpg") //设置附件1
.addAnnexs("A:\\image\\下载.jpg","下载.jpg"); //设置附件2
mailUtil.sendMail(mailMessage); //发送邮件
} catch (AddressException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}