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邮箱为例,如何获取授权码,请跳转这里查看:什么是授权码,它又是如何设置?

申请成功后会跳出如下界面,得到授权码:


三,新建测试类MailController
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
原创粉丝点击