在日常开发过程中,我们经常需要对一些业务处理希望通过邮件的方式告知用户或者相关责任人,这时候我们就需要对邮件发送有一定的了解并熟练使用。
- 在springboot的版本中已经集成了mail组件,我们只需引入其依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 在application.properties文件中加入有关发送邮件的配置:
spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.163.com
#发送者的邮箱密码
spring.mail.password=xxxxxx
#端口
spring.mail.port=25
#协议
spring.mail.protocol=smtp
#发送者的邮箱账号
spring.mail.username=xxxxx@163.com
这里首先必须确定以上配的遇见开通POP3/SMTP/IMAP
POP3服务器: pop.126.com
SMTP服务器: smtp.126.com
IMAP服务器: imap.126.com
- 创建调用邮件发送的控制类
import com.nanshan.willow.mail.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 〈一句话功能简述〉<br>
* 〈邮箱控制层〉
*
* @author andy
* @create 2019/3/8
* @since 1.0.0
*/
@Slf4j
@Controller
public class MailController {
@Resource
MailService mailService;
@RequestMapping("sendmail")
@ResponseBody
public String sendMailToUser(){
String to = "xxxx@126.com";
String subject = "springboot test mail";
String content = "hello world";
mailService.sendSimpleMail(to,subject,content);
return "success";
}
}
- 创建调用邮件发送的业务方法
/**
* 〈一句话功能简述〉<br>
* 〈邮件业务层〉
*
* @author andy
* @create 2019/3/8
* @since 1.0.0
*/
public interface MailService {
public void sendSimpleMail(String to, String subject, String content);
}
- 创建调用邮件发送的业务方法
import com.nanshan.willow.mail.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 〈一句话功能简述〉<br>
* 〈邮箱业务处理类〉
*
* @author andy
* @create 2019/3/8
* @since 1.0.0
*/
@Service
@Slf4j
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
@Override
public void sendSimpleMail(String to, String subject, String content) throws MailException {
SimpleMailMessage message=getSimpleMailMessage( to,null, subject, content);
javaMailSender.send(message);
}
private SimpleMailMessage getSimpleMailMessage(String to,String[] toList, String subject, String content){
SimpleMailMessage message = new SimpleMailMessage();
// 邮件发送者
message.setFrom(from);
if(StringUtils.isEmpty(to)){
// 邮件接受者(数组)
message.setTo(toList);
}else{
// 邮件接受者
message.setTo(to);
}
// 主题
message.setSubject(subject);
// 内容
message.setText(content);
log.info("邮件发送信息实体类"+message);
return message;
}
}
通过以上步骤,最简单的邮件收发就可以完成,希望大家动手试试。
另外,下面是对发送邮件的一点补充。正常的情况下,邮件发送我们必须包含样式模板以及附件这些内容,下面就举例说明邮件模板附件发送有关实现。
1.增加 thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.在在src/resources/templates 下面创建对应模板文件:mailTemp.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>springboot邮件模板</title>
</head>
<body>
<p th:text="${msg1}"></p>
<p th:text="${msg2}"></p>
<p th:text="${msg3}"></p>
</body>
</html>
- 在MailServiceImpl中增加有关模板发送的有关业务方法:
@Resource
TemplateEngine templateEngine;
@Override
public void sendSimpleMailToUsers(String[] to, String subject, String content) throws MailException {
MimeMessage mimeMessage = null;
try {
mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
// 设置发件人邮箱
helper.setFrom(from);
// 设置收件人邮箱
helper.setTo(to);
// 设置邮件标题
helper.setSubject(subject);
// 添加正文(使用thymeleaf模板)
Context context = new Context();
context.setVariable("msg1","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
context.setVariable("msg2","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
context.setVariable("msg3","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
String text=templateEngine.process("mailTemp",context);
helper.setText(text, true);
//发送图片(根据自己图片所在文件处理)
helper.addAttachment("image",new File("../img/hello.jpg"));
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
4.在controller内调用该业务方法完成测试。
@RequestMapping("sendmailToGroup")
@ResponseBody
public String sendmailToGroup(){
List<String> userList=new ArrayList<String>();
userList.add("ccccccccc@126.com");
userList.add("cccccccccccc@163.com");
userList.add("ffffffffffffffff@qq.com");
String[] to = new String[userList.size()];
userList.toArray(to);
String subject = "大家好,我在用Springboot中的mail组件为大家群发发送消息。";
String content = "hello world";
mailService.sendSimpleMailToUsers(to,subject,content);
return "success";
}
总之,springboot中采用自动配置的方式为我们开发节省了不少事情,使得开发变得简单。希望大家可以从中获取到一些帮助。
如果有任何疑问,请随时联系(微信:739659553)。