一:添加mail依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

  

二:添加邮件配置

打开application.properties

#邮箱配置
spring.mail.protocol=smtp
#这里换成自己的邮箱类型 例如qq邮箱就写smtp.qq.com
spring.mail.host=smtp.126.com
spring.mail.port=25
spring.mail.smtpAuth=true
spring.mail.smtpStarttlsEnable=true
#这里换成自己的邮箱类型 例如qq邮箱就写smtp.qq.com
spring.mail.smtpSslTrust=smtp.126.com
#这里换成自己的邮箱账号
spring.mail.username=xxxxxx@126.com
#这里换成自己的邮箱密码或授权码 授权码获取可以百度
spring.mail.password=******

  

三:创建邮件实体类

package com.example.demo.model;

import java.util.Map;

public class Mail {

    /**
* 发给多个人
*/
private String[] to; /**
* 抄送
*/
private String[] cc; /**
* 邮件标题
*/
private String subject; /**
* 邮件内容 简单文本 和附件邮件必填 其余的不需要
*/
private String text; /**
* 模板需要的数据 发送模板邮件必填
*/
private Map<String,String> templateModel; /**
* 选用哪个模板 发送模板邮件必填
*/
private String templateName; public String[] getTo() {
return to;
} public void setTo(String[] to) {
this.to = to;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
} public Map<String, String> getTemplateModel() {
return templateModel;
} public void setTemplateModel(Map<String, String> templateModel) {
this.templateModel = templateModel;
} public String getTemplateName() {
return templateName;
} public void setTemplateName(String templateName) {
this.templateName = templateName;
} public String[] getCc() {
return cc;
} public void setCc(String[] cc) {
this.cc = cc;
}
}

  

四:创建邮件常量类

创建core→constant→MailConstant

package com.example.demo.core.constant;

public class MailConstant {

    /**
* 注册的模板名称
*/
public static final String RETGISTEREMPLATE = "register"; /**
* 模板存放的路径
*/
public static final String TEMPLATEPATH = "src/test/java/resources/template/mail";
}

  

五:创建邮件业务类

MailService

package com.example.demo.service;

import com.example.demo.model.Mail;

import javax.servlet.http.HttpServletRequest;

public interface MailService {

    /**
* 发送简单邮件
* @param mail
*/
void sendSimpleMail(Mail mail); /**
* 发送带附件的邮件
* @param mail
* @param request
*/
void sendAttachmentsMail(Mail mail, HttpServletRequest request); /**
* 发送静态资源 一张照片
* @param mail
* @throws Exception
*/
void sendInlineMail(Mail mail) throws Exception; /**
* 发送模板邮件
* @param mail
*/
void sendTemplateMail(Mail mail);
}

  

MailServiceImpl

package com.example.demo.service.impl;

import com.example.demo.core.constant.MailConstant;
import com.example.demo.core.utils.UploadActionUtil;
import com.example.demo.model.Mail;
import com.example.demo.service.MailService;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List; @Service
public class MailServiceImpl implements MailService { private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class); @Resource
@Qualifier("javaMailSender")
private JavaMailSender mailSender; @Value("${spring.mail.username}")
private String from; @Resource
private FreeMarkerConfigurer freeMarkerConfigurer; /**
* 发送简单邮件
*/
@Override
public void sendSimpleMail(Mail mail){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(mail.getTo());
message.setSubject(mail.getSubject());
message.setText(mail.getText());
message.setCc(mail.getCc());
mailSender.send(message);
} /**
* 发送附件
*
* @throws Exception
*/
@Override
public void sendAttachmentsMail(Mail mail,HttpServletRequest request){
try{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(mail.getTo());
helper.setSubject(mail.getSubject());
helper.setText(mail.getText());
List<String> list = UploadActionUtil.uploadFile(request);
for (int i = 1,length = list.size();i<=length;i++) {
String fileName = list.get(i-1);
String fileTyps = fileName.substring(fileName.lastIndexOf("."));
FileSystemResource file = new FileSystemResource(new File(fileName));
helper.addAttachment("附件-"+i+fileTyps, file);
}
mailSender.send(mimeMessage);
}catch (Exception e){
e.printStackTrace();
} } /**
* 发送静态资源 一张照片
* @param mail
* @throws Exception
*/
@Override
public void sendInlineMail(Mail mail){
try{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(mail.getTo());
helper.setSubject(mail.getSubject());
helper.setText("<html><body><img src=\"cid:chuchen\" ></body></html>", true); FileSystemResource file = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\设计图\\已完成\\微信图片_20180323135358.png"));
// addInline函数中资源名称chuchen需要与正文中cid:chuchen对应起来
helper.addInline("chuchen", file);
mailSender.send(mimeMessage);
}catch (Exception e){
logger.error("发送邮件发生异常");
} } /**
* 发送模板邮件
* @param mail
*/
@Override
public void sendTemplateMail(Mail mail){
MimeMessage message = null;
try {
message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(mail.getTo());
helper.setSubject(mail.getSubject());
//读取 html 模板
freemarker.template.Configuration cfg = getConfiguration();
Template template = cfg.getTemplate(mail.getTemplateName()+".ftl");
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, mail.getTemplateModel());
helper.setText(html, true);
} catch (Exception e) {
e.printStackTrace();
}
mailSender.send(message);
} private static freemarker.template.Configuration getConfiguration() throws IOException {
freemarker.template.Configuration cfg = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_23);
cfg.setDirectoryForTemplateLoading(new File(MailConstant.TEMPLATEPATH));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
return cfg;
}
}

  

六:创建ftl模板

这里我们创建一个注册的模板,其他模板大家可自行创建

在src/test/java/resources/template/mail目录下创建register.ftl

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf8">
</head>
<body>
<div><span>尊敬的</span>${to}:</div>
<div>
<span>欢迎您加入YUI,您的验证码为:
<span style="color: red;">${identifyingCode}</span>
</span>
</div>
<span style="margin-top: 100px">YUI科技</span>
</body>
</html>

  

七:创建MailController

package com.example.demo.controller;

import com.example.demo.core.constant.MailConstant;
import com.example.demo.core.ret.RetResponse;
import com.example.demo.core.ret.RetResult;
import com.example.demo.core.utils.ApplicationUtils;
import com.example.demo.model.Mail;
import com.example.demo.service.MailService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map; @RestController
@RequestMapping("/mail")
public class MailController { @Resource
private MailService mailService; /**
* 发送注册验证码
* @param mail
* @return 验证码
* @throws Exception
*/
@PostMapping("/sendTemplateMail")
public RetResult<String> sendTemplateMail(Mail mail) throws Exception {
String identifyingCode = ApplicationUtils.getNumStringRandom(6);
mail.setSubject("欢迎注册初晨");
mail.setTemplateName(MailConstant.RETGISTEREMPLATE);
Map<String,String> map = new HashMap<>();
map.put("identifyingCode",identifyingCode);
map.put("to",mail.getTo()[0]);
mail.setTemplateModel(map);
mailService.sendTemplateMail(mail); return RetResponse.makeOKRsp(identifyingCode);
} @PostMapping("/sendAttachmentsMail")
public RetResult<String> sendAttachmentsMail(Mail mail,HttpServletRequest request) throws Exception {
mail.setSubject("测试附件");
mailService.sendAttachmentsMail(mail, request);
return RetResponse.makeOKRsp();
}
}

  

八:测试

输入localhost:8080/mail/sendTemplateMail

必填参数 to

(十三)SpringBoot 发送E-mail的更多相关文章

  1. 使用SpringBoot发送mail邮件

    1.前言 发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息.正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在springboot提供了一套更简易使用 ...

  2. SpringBoot 发送简单邮件

    使用SpringBoot 发送简单邮件 1. 在pom.xml中导入依赖 <!--邮件依赖--> <dependency> <groupId>org.springf ...

  3. Java发送邮件 —— SpringBoot集成Java Mail

    用途:此文仅供,自己今后的小程序通过邮件,批量通知用户. 简单记录了一些发送基本邮件的操作. 项目(SpringBoot版本为2.1.2.RELEASE): 核心依赖(其他相关依赖,在其使用的地方具体 ...

  4. [SpringBoot] - 发送带附件的邮件

    <!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...

  5. qq邮箱发送,mail from address must be same as authorization user

    由于邮箱发送的邮箱账号更换,所以重新测试.结果一直出错,要不就是请求超时,要不就是未授权. 用smtp 开始的时候,端口使用495,结果是请求超时. 后来改成25,结果是未授权. 再后来听人说,有一个 ...

  6. SpringBoot | 集成Java Mail

    Spring Boot 对Java mail 集成提供了自动配置的支持,只需要配置依赖以及在application.properties 里配置邮件信息即可. 添加依赖: <dependency ...

  7. SpringBoot发送简单文本邮件

    1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...

  8. springboot发送email邮件

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  9. springboot——发送put、delete请求

    在springmvc中我们要发送put和delete请求,需要先配置一个过滤器HiddenHttpMethodFilter,而springboot中,已经帮我们自动配置了,所以我们可以不用配置这个过滤 ...

随机推荐

  1. Impala 安装笔记3一impala安装

    安装impala之前,确认满足Cloudera Impala Requirements中要求的所有条件: Supported Operating Systems Supported CDH Versi ...

  2. LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数

    题目链接:https://vjudge.net/problem/LightOJ-1336 1336 - Sigma Function    PDF (English) Statistics Forum ...

  3. 【转载】Android进程保活招式大全

    原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 An ...

  4. C# 获取utc时间,以及utc datetime 互相转化

    C# 获取utc时间,以及utc datetime 互相转化   大部分源于http://blog.sina.com.cn/s/blog_4c6e822d0102dsdz.html 刚开始学习一点C# ...

  5. 值域线段树 (玲珑OJ 1117)

    点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...

  6. Python: PS 滤镜--旋涡特效

    本文用Python 实现 PS 滤镜的旋涡特效,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/42215 ...

  7. codevs 4768跳石头

    传送门 4768 跳石头  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在 ...

  8. bzoj 3527 [Zjoi2014] 力 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 看了看TJ才推出来式子,还是不够熟练啊: TJ:https://blog.csdn.n ...

  9. 将List<T>集合用DataGridView展示

    一.若要将List<T>集合的值赋值给DataGridView,首先要DataGridView中的列的DataPropertyName的值要和此集合的T类型的属性字段的名称,类型一致,并且 ...

  10. 二、mysql安装详解

    step1:打开下载的mysql安装文件(mysql-5.5.36-win32.msi),双击运行,如下图: step2:点击“Next”按钮继续,如下图: step3:点击“勾选”,点击“Next” ...