SpringBoot之邮件发送
2018-01-24 22:30
771 查看
项目结构:
1.添加依赖:
application.properties
EmailService.java
EmailServiceImpl.java
MainController.java
邮件模板:template.ftl
main.html
注意:
当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,
其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),
因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可,如下截图
设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。
1.添加依赖:
<!-- 整合邮件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- freemarker模板 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
application.properties
# JavaMailSender \u90AE\u4EF6\u53D1\u9001\u7684\u914D\u7F6E spring.mail.host=smtp.163.com spring.mail.username=XXX spring.mail.password=XXXX spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true
EmailService.java
public interface EmailService { /** * 发送简单邮件 * * @param sendTo * 收件人地址 * @param titel * 邮件标题 * @param content * 邮件内容 */ public void sendSimpleMail(String sendTo, String titel, String content); /** * 发送带附件的邮件 * @param sendTo * 收件人地址 * @param titel * 邮件标题 * @param content * 邮件内容 */ public void sendAttachmentsMail(String sendTo, String titel, String content); /** * 发送模板邮件 * @param sendTo * 收件人地址 * @param titel * 邮件标题 */ public void sendTemplateMail(String sendTo, String title); }
EmailServiceImpl.java
@Service public class EmailServiceImpl implements EmailService { @Autowired private JavaMailSender mailSender; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; //自动注入 @Value("${spring.mail.username}") private String sender; // 读取配置文件中的参数 @Override public void sendSimpleMail(String sendTo, String titel, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sender); message.setTo(sendTo); message.setSubject(titel); message.setText(content); mailSender.send(message); } @Override public void sendAttachmentsMail(String sendTo, String titel, String content) { MimeMessage message = null; try { message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(sendTo); helper.setSubject(titel); helper.setText(content); // 注意项目路径问题,自动补用项目路径 FileSystemResource file = new FileSystemResource(new File( "D://data//1.jpg")); // 加入邮件 helper.addAttachment("图片.jpg", file); } catch (Exception e) { e.printStackTrace(); } mailSender.send(message); } @Override public void sendTemplateMail(String sendTo, String title) { MimeMessage message = null; try { message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(sendTo); helper.setSubject(title); Map<String, String> model = new HashMap<String, String>(); model.put("username", "dx"); // 读取 html 模板 Template template = freeMarkerConfigurer.getConfiguration() .getTemplate("mail.html"); String html = FreeMarkerTemplateUtils.processTemplateIntoString( template, model); helper.setText(html, true); } catch (Exception e) { e.printStackTrace(); } mailSender.send(message); } }
MainController.java
package com.dx.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.dx.service.EmailService; @RestController public class MainController { @Autowired private EmailService emailService; /** * 测试发送简单邮件 * * @return * @throws Exception */ @RequestMapping(value = "/sendSimpleEmail", method = RequestMethod.GET) public String sendSimpleEmail() throws Exception { String sendTo = "1278461341@qq.com"; String title = "测试简单邮件"; String content = "测试邮件内容"; emailService.sendSimpleMail(sendTo, title, content); return "发送成功!"; } /** * 测试发送带附件的邮件 * * @return * @throws Exception */ @RequestMapping(value = "/sendFileEmail", method = RequestMethod.GET) public String sendFileEmail() throws Exception { String sendTo = "1278461341@qq.com"; String title = "测试带附件邮件"; String content = "测试邮件内容"; emailService.sendAttachmentsMail(sendTo, title, content); return "发送成功!"; } /** * 测试发送模板邮件 * * @return * @throws Exception */ @RequestMapping(value = "/sendTempEmail", method = RequestMethod.GET) public String sendTempEmail() throws Exception { String sendTo = "1278461341@qq.com"; String title = "测试模板邮件"; emailService.sendTemplateMail(sendTo, title); return "发送成功!"; } }
邮件模板:template.ftl
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <body> <h3>你好, ${username}, 这是一封模板邮件!</h3> </body> </html>
main.html
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <body> <h3>你好, ${username}, 这是一封模板邮件!</h3> </body> </html>
注意:
当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,
其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),
因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可,如下截图
设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。
相关文章推荐
- springboot中发送各种类型的邮件
- SpringBoot之发送邮件功能
- spring boot 发送邮件
- Spring Boot中使用JavaMailSender发送邮件
- springboot发送邮件的实现例子
- Spring Boot 菜鸟教程 26 集成邮件发送
- springboot 实现邮件发送功能
- 47. Spring Boot发送邮件【从零开始学Spring Boot】
- SpringBoot中发送QQ邮件功能的实现代码
- Spring Boot系列(十三) Spring Boot 发送邮件
- Spring Boot实战之发送邮件示例代码
- yx: SpringBoot发送邮件功能
- springboot 邮件发送实现
- Spring Boot实战之发送邮件
- 使用spring-boot-starter-mail实现邮件发送
- springboot发送邮件
- springboot 邮件接收发送 阿里云发送短信组件
- Springboot JavaMailSender发送邮件(QQ和163)
- Spring Boot系列(十三) Spring Boot 发送邮件
- Spring Boot发送邮件详解