您的位置:首页 > 编程语言 > Java开发

SpringBoot之邮件发送

2018-01-24 22:30 771 查看
项目结构:



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邮箱,进入邮箱中心——客户端授权密码,选择开启即可,如下截图



设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spirngboot 邮件