第一步:maven中引入POI
<!-- 邮箱发送验证-start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 邮箱发送验证-end -->
<!-- json添加-start -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- json添加-end-->
package com.cnc.etrust.service.util;
import java.io.File;
import java.util.HashMap;
import java.util.Properties;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import com.cnc.etrust.domain.Dictionaries;
import com.cnc.etrust.repository.DictionariesRepository;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* 发送邮箱工具类
*
* @author djm
* @version v1.0.0
* @since 2018-07-18
*/
@Service
public class MailUtil {
// log信息
private final Logger log = LoggerFactory.getLogger(MailUtil.class);
@Autowired
private DictionariesRepository dic;
/**
* 发送简单邮件
* 方式:一对一
*
* @author djm
*/
public HashMap<String,Object> sendSimpleContent(String receiveEmail, String title, String content) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱信息
SimpleMailMessage message = new SimpleMailMessage();
// 发信箱
message.setFrom(sender.getUsername());
// 收信箱
message.setTo(receiveEmail);
// 邮箱头部信息
message.setSubject(title);
// 邮箱内容
message.setText(content);
// 发送邮件
sender.send(message);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
} catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 发送简单邮件
* 方式:一对多
*
* @author djm
*/
public HashMap<String,Object> sendSimpleContent(JSONArray receiveEmail, String title, String content) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱信息
SimpleMailMessage message = new SimpleMailMessage();
// 发信箱
message.setFrom(sender.getUsername());
// 设置地址
String[] arr = new String[receiveEmail.size()];
// 获取迭代器
for(Integer i=0;i<receiveEmail.size();i++){
arr[i] = receiveEmail.getJSONObject(i).getString("email");
}
// 收信箱
message.setTo(arr);
// 邮箱头部信息
message.setSubject(title);
// 邮箱内容
message.setText(content);
// 发送邮件
sender.send(message);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
} catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 发送html邮件(不带图片)
* 方式:一对一
*
* @author djm
*/
public HashMap<String,Object> sendHtmlContent(String receiveEmail, String title, String content) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱消息
MimeMessage mailMessage = sender.createMimeMessage();
// 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用。
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
// 发信箱
messageHelper.setFrom(sender.getUsername());
// 收信箱
// 第一个参数:接收者类型-TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人
// 第二个参数:收信箱地址
messageHelper.setTo(receiveEmail);
// 邮箱头部信息
messageHelper.setSubject(title);
// 邮箱内容
messageHelper.setText(content,true);
// 发送邮件
sender.send(mailMessage);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
}catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 发送html邮件(不带图片)
* 方式:一对多
*
* @author djm
*/
public HashMap<String,Object> sendHtmlContent(JSONArray receiveEmail, String title, String content) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱消息
MimeMessage mailMessage = sender.createMimeMessage();
// 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用。
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
// 发信箱
messageHelper.setFrom(sender.getUsername());
// 设置地址
String[] arr = new String[receiveEmail.size()];
// 获取迭代器
for(Integer i=0;i<receiveEmail.size();i++){
arr[i] = receiveEmail.getJSONObject(i).getString("email");
}
// 收信箱
// 第一个参数:接收者类型-TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人
// 第二个参数:收信箱地址
messageHelper.setTo(arr);
// 邮箱头部信息
messageHelper.setSubject(title);
// 邮箱内容
messageHelper.setText(content,true);
// 发送邮件
sender.send(mailMessage);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
}catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 发送html邮件(带图片)
* 方式:一对一
*
* @author djm
*/
public HashMap<String,Object> sendHtmlContent(String receiveEmail, String title, String content, JSONObject img) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱消息
MimeMessage mailMessage = sender.createMimeMessage();
// 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用。
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
// 发信箱
messageHelper.setFrom(sender.getUsername());
// 收信箱
// 第一个参数:接收者类型-TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人
// 第二个参数:收信箱地址
messageHelper.setTo(receiveEmail);
// 邮箱头部信息
messageHelper.setSubject(title);
// 邮箱内容
messageHelper.setText(content,true);
// 图片
FileSystemResource imgSource = new FileSystemResource(new File(img.getString("imgSource")));
messageHelper.addInline(img.getString("imgName"), imgSource);
// 发送邮件
sender.send(mailMessage);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
}catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 发送html邮件(不带图片)
* 方式:一对多
*
* @author djm
*/
public HashMap<String,Object> sendHtmlContent(JSONArray receiveEmail, String title, String content, JSONObject img) {
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 获取发送邮件对象
JavaMailSenderImpl sender = setSenderConfig();
try {
// 建立邮箱消息
MimeMessage mailMessage = sender.createMimeMessage();
// 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用。
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
// 发信箱
messageHelper.setFrom(sender.getUsername());
// 设置地址
String[] arr = new String[receiveEmail.size()];
// 获取迭代器
for(Integer i=0;i<receiveEmail.size();i++){
arr[i] = receiveEmail.getJSONObject(i).getString("email");
}
// 收信箱
// 第一个参数:接收者类型-TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人
// 第二个参数:收信箱地址
messageHelper.setTo(arr);
// 邮箱头部信息
messageHelper.setSubject(title);
// 邮箱内容
messageHelper.setText(content,true);
// 图片
FileSystemResource imgSource = new FileSystemResource(new File(img.getString("imgSource")));
messageHelper.addInline(img.getString("imgName"), imgSource);
// 发送邮件
sender.send(mailMessage);
// 设置结果
result.put("status", "success");
result.put("message", "发送成功");
}catch (Exception e) {
// TODO: handle exception
log.info(e.getMessage());
// 设置结果
result.put("status", "error");
result.put("message", e.getMessage());
}
return result;
}
/**
* 设置初始配置
*
* @author djm
*/
public JavaMailSenderImpl setSenderConfig() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
// 设置服务器
Dictionaries emailHostInfo = dic.findOne(new Long(129));
if(emailHostInfo != null){
sender.setHost(emailHostInfo.getContent());
}else{
sender.setHost("邮箱域名");
}
// 设置发送端口
sender.setPort(25);
// 用户名
Dictionaries emailUserInfo = dic.findOne(new Long(130));
if(emailUserInfo != null){
sender.setUsername(emailUserInfo.getContent());
}else{
sender.setUsername("你的邮箱用户名");
}
// 密码
Dictionaries emailPassInfo = dic.findOne(new Long(131));
if(emailPassInfo != null){
sender.setPassword(emailPassInfo.getContent());
}else{
sender.setPassword("你的密码或权限码");
}
// 参数设置
Properties prop = new Properties();
// 认证用户名和密码是否正确
prop.put("mail.smtp.auth", "true");
// 设置多长时间后自动停止
prop.put("mail.smtp.timeout", "25000");
// 进行加密
prop.put("mail.starttls.enable", "true");
prop.put("mail.starttls.required", "true");
// 设置参数
sender.setJavaMailProperties(prop);
// 设置编码格式
sender.setDefaultEncoding("UTF-8");
// 返回对象
return sender;
}
/**
* 发送邮件
*
* @param info-参数:receiveEmail 收信箱、title 邮件标题、content 邮件内容、type 邮件类别
* @return
* @author djm
*/
public HashMap<String,Object> send(JSONObject info){
// 返回对象
HashMap<String,Object> result = new HashMap<String,Object>();
// 类别
String type = info.getString("type");
if(info.getString("receiveEmail").isEmpty()){
result.put("status", "");
result.put("message", "收信箱不能为空!");
}else{
// 简单发送-一对一
if("1".equals(type)){
result = this.sendSimpleContent(info.getString("receiveEmail"), info.getString("title"), info.getString("content"));
// 简单发送-一对多
}else if("2".equals(type)){
result = this.sendSimpleContent(info.getJSONArray("receiveEmail"), info.getString("title"), info.getString("content"));
// 不带图片的html发送-一对一
}else if("3".equals(type)){
result = this.sendHtmlContent(info.getString("receiveEmail"), info.getString("title"), info.getString("content"));
// 不带图片的html发送-一对多
}else if("4".equals(type)){
result = this.sendHtmlContent(info.getJSONArray("receiveEmail"), info.getString("title"), info.getString("content"));
// 带图片的html发送-一对多
}else if("5".equals(type)){
result = this.sendHtmlContent(info.getString("receiveEmail"), info.getString("title"), info.getString("content"), info.getJSONObject("img"));
// 带图片的html发送-一对多
}else if("6".equals(type)){
result = this.sendHtmlContent(info.getJSONArray("receiveEmail"), info.getString("title"), info.getString("content"), info.getJSONObject("img"));
}
}
return result;
}
}