spring boot 已经对发送邮件作了作封装,只需引入spring-boot-starter-mail 便可快速的在springboot项目中实现发送邮件的功能。若是想要发送html文本的邮件,利用freemarker做为模板引擎来实现。下面具体的介绍springboot,freemarker 发送邮件。html
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
这一步很重要,只有当发送方的邮件服务器开启了smtp服务,发送方才能将邮件发送出去。java
qq邮箱与网易邮箱的开启smtp方法:spring
http://www.javashuo.com/article/p-fwksqyiw-gy.html安全
在springboot 项目中修改application.yml 文件,添加发送邮件相关的配置。
1.使用stmp的配置springboot
spring: mail: default-encoding: utf-8 host: smtp.163.com username: xxxxx@163.com password: xxxxxxxxxx # 受权码 port: 25 protocol: smtp
2.使用安全的smtp的配置(smtps)服务器
spring: mail: default-encoding: utf-8 host: smtp.163.com username: xxxxx@163.com password: xxxxxxxxxx # 受权码 port: 465 protocol: smtps
@Service @Slf4j public class MailServiceImpl implements MailService { //注入MailSender @Autowired private JavaMailSender mailSender; //发送邮件的模板引擎 @Autowired private FreeMarkerConfigurer configurer; /** * 参数 * @param params 参数 * @param title 邮件标题 * @param templateName 模板的名称 * @param from 发送者 * @param to 接受者 */ @Override public void sendMessageMail(Object params, String title, String templateName, String from, String to) { try { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); //发送者 helper.setFrom(from); //发送给谁 helper.setTo(InternetAddress.parse(to)); helper.setSubject( "【" + title + "】");//邮件标题 Map<String, Object> model = new HashMap<>(); model.put("params", params); try { Template template = configurer.getConfiguration().getTemplate(templateName); try { String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model); helper.setText(text, true); mailSender.send(mimeMessage); } catch (TemplateException e) { log.error("[MailServiceImpl]-[sendMessageMail] 异常", e); } } catch (IOException e) { e.printStackTrace(); } } catch (MessagingException e) { e.printStackTrace(); } } }
在resources/templates 下面建立一个 freemarker 文件 mail.ftl。app
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>发送邮件demo</title> </head> <body> <div> <h2>发送邮件demo</h2> <p> <span style="color: #cf1322">${(params.title)!""}</span><span>发送邮件</span><span style="color: #2f54eb">demo</span> </p> </div> </body> </html>
调用发送文件。ide
@Autowired private MailProperties mailProperties; @Test public void mailTest(){ Map<String,Object> map = new HashMap<>(); map.put("title","张三"); mailService.sendMessageMail(map, "邮件测试", "mail.ftl", mailProperties.getUsername(), "123@qq.com"); }
发送结果spring-boot
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1
须要配置阿里云安全组,开放465 出口权限。测试