1、添加pom.xml依赖文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、创建工具类
package com.superkind.common.util.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
/**
* 邮件工具类
* @author yokips
* @date 2019/12/6 10:41
*/
@Component
public class EmailUtil {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.fromMail.addr}")
private String from;
/**
* html邮件
* @param to 接收人
* @param subject 主题
* @param content 邮件内容
* @return
*/
public Boolean sendHtmlMail(String to, String subject, String content) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
// true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to); //接收者的邮箱
helper.setSubject(subject);//标题
helper.setText(content, true);//内容
javaMailSender.send(message);
return true;
} catch (MessagingException e) {
return false;
}
}
}
3、在application.xml中写邮件相关配置
mail:
default-encoding: UTF-8
host: smtp.exmail.qq.com
username: xxxxx@sina.com
password: xxxxxxxxxx
fromMail:
addr: 冲冲冲<xxxx@sina.com> #发件人 需要跟mail的username相同
port: 465
properties:
mail:
smtp:
auth: true #设置是否需要认证
starttls: #将纯文本连接升级为加密连接(TLS或SSL)而不是另外使用一个端口作加密通信
enable: true
required: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
实际上这个工具类就已经可以实现发送邮件的功能了,但为了更灵活的对各种消息进行发送,可以使用消息模板来对内容进行控制
1、建立消息模板表
CREATE TABLE `cy_message_sys_message_teplate` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`msgtemplate_key` varchar(50) NOT NULL COMMENT '消息Key,代码中需要对应',
`msgtemplate_name` varchar(50) NOT NULL COMMENT '描述',
`msgtemplate_context` varchar(255) NOT NULL DEFAULT '0' COMMENT '消息模板内容',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '数据是否删除 0正常1删除,默认0',
`edit_flag` char(1) NOT NULL DEFAULT '0' COMMENT '0可编辑1不可编辑',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`url` varchar(255) DEFAULT NULL COMMENT '前端页面跳转',
`type` char(255) DEFAULT '0' COMMENT '类型 1 指定人员',
`user_id` int(11) DEFAULT NULL COMMENT '指定人员ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COMMENT='消息模板表';
添加一条测试数据
测试数据
service层调用代码
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
/**
* <p>
* 邮件发送相关代码
* </p>
*
* @author yokip
* @since 2019-12-10
*/
@Service
public class SysEnquiryServiceImpl extends ServiceImpl<SysEnquiryMapper, SysEnquiry> implements ISysEnquiryService {
@Autowired
private SysEnquiryInfoMapper infoMapper;
@Autowired
EmailUtil emailUtil;
public void test(){
//查找消息模板信息
MessageTemlateInfoVO temlateInfo = infoMapper.getMessageTemplateInfo("TEST");
if(temlateInfo==null){
throw new RuntimeException("未找到消息模板");
}
//消息模板参数 将消息模板中的#{0} #{1} 替换成需要的字符
HashMap params = new HashMap();
params.put("0","测试测试");
params.put("1","测试测试");
//发送邮件
emailUtil.sendHtmlMail("xxxxx@outlook.com",temlateInfo.getMsgtemplateName(),replaceString(temlateInfo.getMsgtemplateContext(),params));
//如果是群发则循环发送
List<String> emailList = new ArrayList<>();
emailList.add("xxxxx@sina.com");
emailList.add("xxxxx@outlook.com");
emailList.add("xxxxx@qq.com");
//循环发送邮件
emailList.forEach(email->{
emailUtil.sendHtmlMail("kimoji981002@outlook.com",temlateInfo.getMsgtemplateName(),replaceString(temlateInfo.getMsgtemplateContext(),params));
});
}
//将消息模板中的#{0} #{1} 替换成需要的字符
private String replaceString(String context, Map map) {
for (int i = 0; i < map.size(); i++) {
Object replaceValue = map.get("" + i + "");
context = context.replace("#{" + (i) + "}", replaceValue.toString());
}
return context;
}
}
网友评论