Springboot实现邮件发送
目录:
1、引入依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springboot</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springbootmail</artifactId>
<dependencies>
<!--应用spring springmvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>naekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
</dependencies>
</project>
2、配置application.properties
[email protected]
spring.mail.password=ynuxsvplrsribjca
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
[email protected]:是发送方的邮箱
spring.mail.password:密码不是邮箱的密码,是随机生成的
步骤:登录邮箱:
1、
2、
3、下拉到下图,开启pop3。发song
4、发送信息获取授权码就是代码里面用的密码
其他的一样
3 DAO 实体类 ConfingEmailName.java
package Dao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component// 将该类对象交给sprin容器
public class ConfingEmailName {
@Value("${spring.mail.username}")//获取自定义properties里的发送方名称
private String sendEmailName ;
public String getSendEmailName() {
return sendEmailName;
}
public void setSendEmailName(String sendEmailName) {
this.sendEmailName = sendEmailName;
}
}
4、业务处理层
接口
package springbootmail.service;
import java.io.File;
public interface IsendSimpleEmainService {
//参数描述 1,发送给谁,2,标题 3,邮件内容
void sendEmaile(String sendTo,String Title,String content);
void sendFileEmaile(String sendTo,String Title,String content,File file);
//发送带模版的邮件 基于freemarker // info参数就是我们要发送的模版
void sendFileTemplateEmaile(String sendTo,String Title,String info);
}
实现类:
package springbootmail.service;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.amqp.RabbitProperties.Template;
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.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import Dao.ConfingEmailName;
@Service
public class EmailserviceImpl implements IsendSimpleEmainService {
@Autowired
private ConfingEmailName name;
@Autowired
private JavaMailSender send;
@Override
/*
* 发送简单邮件,纯文本 1 谁发送 ,可以在ConfingEmailName.java类得到 @Autowired private
* ConfingEmailName name; 2 注入 @Autowired private JavaMailSender send;
* 邮件发送对象 3 构建一封邮件 由SimpleMailMessage实体类api 完成
*/
public void sendEmaile(String sendTo, String Title, String content) {
// TODO Auto-generated method stub
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(name.getSendEmailName());//谁发送
message.setTo(sendTo);//发送给谁
message.setSubject(Title);//发送邮件的标题
message.setText(content);//发送邮件内容
send.send(message);
}
@Override
/* 实现带附件的邮件发送
* 1 需要由MimeMessage类封装成mime类型
* 2 邮件信息
* */
public void sendFileEmaile(String sendTo, String Title, String content,
File file) {
MimeMessage message = send.createMimeMessage();
try{
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(name.getSendEmailName());
helper.setTo(sendTo);
helper.setSubject(Title);
helper.setText(content);
//file 的处理
FileSystemResource resouce = new FileSystemResource(file);
helper.addAttachment("哈哈哈附件", resouce);
}
catch(Exception e){
e.printStackTrace();
}
send.send(message);
}
@Autowired
private FreeMarkerConfigurer freeMarker;
@Override
public void sendFileTemplateEmaile(String sendTo, String Title, String info) {
MimeMessage message = send.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(name.getSendEmailName());
helper.setTo(sendTo);
helper.setSubject(Title);
// 模版数据的处理
Map<String, Object> mode1 = new HashMap<String, Object>();
mode1.put("username", " 小红");
// 得到模版
freemarker.template.Template template = freeMarker.getConfiguration().getTemplate(info);
// 将数据与模版封装成字符串
String html = FreeMarkerTemplateUtils.processTemplateIntoString(
template, mode1);
//将字符串封到helper
helper.setText(html,true);
} catch (Exception e) {
e.printStackTrace();
}
send.send(message);
}
}
5、控制层controer SendMaileController.java
package Controller;
import java.io.File;
import javax.mail.internet.MimeMessage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sun.mail.handlers.multipart_mixed;
import springbootmail.service.IsendSimpleEmainService;
@Controller
public class SendMaileController {
@Autowired
JavaMailSenderImpl mailSender;
@Autowired
private IsendSimpleEmainService service;
@RequestMapping("/send")
@ResponseBody
public String send(){
SimpleMailMessage mm=new SimpleMailMessage();
mm.setSubject("通知");
mm.setText("今晚7点开会");
mm.setTo("[email protected]");
mm.setFrom("[email protected]");
mailSender.send(mm);
return"ok";
}
// @RequestMapping("/sendtest")
// @ResponseBody
//public void test2() {
// //复杂的消息邮件
// MimeMessage aa=mailSender.createMimeMessage();
// MimeMessageHelper hh=new MimeMessageHelper(aa,multipart:true);
// hh.setSubject("通知");
// hh.setText("<b styles='color:red'>今晚7点开会</b>",html:true);
// hh.setTo("[email protected]");
// hh.setFrom("[email protected]");
//
//
// //上传文件、
// hh.addAttachment(attachmentFilename: "1.jsp", new File(pathname:"C:\\Users\\符加诗\\Desktop\7"));
// hh.addAttachment(attachmentFilename: "2.jsp", new File(pathname:"C:\\Users\\符加诗\\Desktop\1"));
// mailSender.send(aa);
//
//}
//
//
@RequestMapping("/sendFile")
@ResponseBody
public String sendFile(){
//File file = new File("src/main/resources/static/7.PNG");
File file = new File("src/main/resources/static/springboot.database.txt");
service.sendFileEmaile("[email protected]", "玩", "很好玩", file);
return"sendFile";
}
@RequestMapping("/sendTemplate")
@ResponseBody
public String sendTemplate(){
service.sendFileTemplateEmaile("[email protected]", "玩", "addUser.html");
return"sendTemplate";
}
}
6、启动类test
package Test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages={"Controller","springbootmail.service","dao"})//此处除了扫描controller service 还要扫描获的自定义文件的类包名
public class test {
public static void main(String[] args) {
SpringApplication.run(test.class, args);
}
}
前端页面:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${username}
${username}
${username}
${username}
</body>
</html>
运行完成: