SpringBoot 学习记录(九): Email
来源:互联网 发布:网络通则 编辑:程序博客网 时间:2024/06/06 22:55
一,先引入相关依赖包
<!-- email --><dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>二,在application.properties中配置发送邮件需要的相关属性
# 设置邮箱主机spring.mail.host=smtp.qq.com# 设置用户名spring.mail.username=8*******8@qq.com# 设置密码spring.mail.password=mwpjxevxxxxxbcic# 关闭认证spring.mail.properties.mail.smtp.auth=false# 对纯文本通信协议的扩展,它提供一种方式将纯文本链接升级为加密链接(TLS或SSL),而不是另外使用一个端口作加密通信。spring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=true
注意:选择用来发送邮件的服务邮箱先申请开通POP3/SMTP服务
申请开通后会得到一个授权码,用这个授权码作为上面需要填写的密码。
如果没有申请授权,发送邮件会报错:Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first !
这里以QQ邮箱为例,如何获取授权码,请跳转这里查看:什么是授权码,它又是如何设置?
申请成功后会跳出如下界面,得到授权码:
package com.example.controller;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.annotation.Resource;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;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.ui.freemarker.FreeMarkerTemplateUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.example.base.ReturnResult;import com.example.constant.ReturnConstant;import freemarker.core.ParseException;import freemarker.template.Configuration;import freemarker.template.MalformedTemplateNameException;import freemarker.template.Template;import freemarker.template.TemplateException;import freemarker.template.TemplateNotFoundException;/** * 发送邮件 * @author Administrator * */@RestController@RequestMapping("/mail")public class MailController {/** * 引入依赖包后sping_boot会在启动的时候自动实例化JavaMailSender对象 * 这里直接引入使用即可 */@Resourceprivate JavaMailSender mailSender;/** * 发送一封普通文本邮件 * @return */@RequestMapping("/send/1")public ReturnResult setMail1(){SimpleMailMessage message = new SimpleMailMessage();message.setSubject("我的第一封文本邮件");message.setText("Hello World!");message.setTo("8*******8@qq.com");message.setFrom("8*******8@qq.com");mailSender.send(message);ReturnResult r = new ReturnResult();r.setStatus(ReturnConstant.RETURN_OK);r.setMsg("send success");return r;}/** * 发送一封带有附件的邮件 * @return * @throws MessagingException */@RequestMapping("/send/2")public ReturnResult setMail2() throws MessagingException{MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setSubject("我的第一封带有附件的邮件");helper.setText("Hello World!");helper.setTo("8*******8@qq.com");helper.setFrom("8*******8@qq.com");//附件. FileSystemResource file = new FileSystemResource( new File("C:/Users/Administrator/Desktop/demo1.png")); helper.addAttachment("demo1.png", file); mailSender.send(mimeMessage); ReturnResult r = new ReturnResult();r.setStatus(ReturnConstant.RETURN_OK);r.setMsg("send success");return r;}/** * 发送一封模板邮件 * @return * @throws MessagingException * @throws IOException * @throws ParseException * @throws MalformedTemplateNameException * @throws TemplateNotFoundException * @throws TemplateException */@RequestMapping("/send/3")public ReturnResult setMail3() throws MessagingException, TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException, TemplateException{MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setSubject("我的第一封模板邮件");helper.setTo("8*******8@qq.com");helper.setFrom("8*******8@qq.com");Map<String, Object> model = new HashMap<String, Object>(); model.put("username", "World"); Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); // 设定去哪里读取相应的ftl模板 cfg.setClassForTemplateLoading(this.getClass(), "/templates"); // 在模板文件目录中寻找名称为name的模板文件 Template template = cfg.getTemplate("email.ftl"); String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model); helper.setText(html, true); mailSender.send(mimeMessage);ReturnResult r = new ReturnResult();r.setStatus(ReturnConstant.RETURN_OK);r.setMsg("send success");return r;}}
==== 这里为了方便测试,建议发件人跟收件人都设置成自己的邮箱
这里有用到freemarker发送模板邮件,具体使用步骤如下:
1,引入freemarker依赖包:
<!-- 引入模板引擎,用于发送模板邮件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
2,在application.properties中添加freemarker配置:
#freemarkerspring.freemarker.allow-request-override=falsespring.freemarker.cache=truespring.freemarker.check-template-location=truespring.freemarker.charset=UTF-8spring.freemarker.content-type=text/htmlspring.freemarker.expose-request-attributes=falsespring.freemarker.expose-session-attributes=falsespring.freemarker.expose-spring-macro-helpers=false
3,在resource/templates目录下新建email.ftl
<html> <body> <h3>Hello, ${username}, Nice to meet you!</h3></body> </html>启动测试:
============================================================================================================
邮件全部发送成功,下篇我们来学习,也是这个系列的最后一篇:SpringBoot 学习记录(十): scheduler
0 0
- SpringBoot 学习记录(九): Email
- springboot学习记录一、SpringBoot简介
- SpringBoot学习记录1------启动
- Springboot学习记录4------profile
- SpringBoot学习记录5------logback
- SpringBoot 学习记录(二): mybaits
- SpringBoot 学习记录(三): jpa
- SpringBoot 学习记录(六): Exception
- SpringBoot 学习记录(七): Redis
- SpringBoot 学习记录(十): scheduler
- springBoot 学习记录(一)
- spring boot 学习(十)SpringBoot配置发送Email
- SpringBoot 学习记录(五): aop记录日志
- SpringBoot学习-(九)SpringBoot中的AOP
- springboot学习笔记(九) spring cache
- SpringBoot集成Email
- 04. springboot集成email
- oracle学习记录之九
- java 类的初始化
- 动态规划:HDU-2955-0-1背包问题:Robberies
- namespace及use的用法
- 【材料计算】第一性原理、密度泛函理论、从头算之间的关系
- Maven 多环境配置文件管理
- SpringBoot 学习记录(九): Email
- IOS webview在线预览文件图片等
- 点击控件以外的区域使页面(activity)关闭,dispatchTouchEvent用法
- linux环境下使用V4L2及Qt设计简易照相机
- 线程implements Runnable和extends Thread有什么区别
- 用opencv使用大恒相机的痛苦经历
- Python与Java的区别小汇二
- PAT1031 查验身份证(15)
- HTTP图解(三)HTTP2.0