(十三)SpringBoot 发送E-mail
2021-06-15 18:02
YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
标签:ica 邮件内容 mod row work coding ttext red 17.
一:添加mail依赖
org.springframework.boot spring-boot-starter-mail
二:添加邮件配置
打开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 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 getTemplateModel() {
return templateModel;
}
public void setTemplateModel(Map 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 list = UploadActionUtil.uploadFile(request);
for (int i = 1,length = list.size();i
", 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
尊敬的${to}:欢迎您加入YUI,您的验证码为: ${identifyingCode}YUI科技
七:创建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 sendTemplateMail(Mail mail) throws Exception {
String identifyingCode = ApplicationUtils.getNumStringRandom(6);
mail.setSubject("欢迎注册初晨");
mail.setTemplateName(MailConstant.RETGISTEREMPLATE);
Map 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 sendAttachmentsMail(Mail mail,HttpServletRequest request) throws Exception {
mail.setSubject("测试附件");
mailService.sendAttachmentsMail(mail, request);
return RetResponse.makeOKRsp();
}
}
八:测试
输入localhost:8080/mail/sendTemplateMail
必填参数 to

(十三)SpringBoot 发送E-mail
标签:ica 邮件内容 mod row work coding ttext red 17.
原文地址:https://www.cnblogs.com/yui66/p/9632993.html
文章标题:(十三)SpringBoot 发送E-mail
文章链接:http://soscw.com/index.php/essay/94227.html