想的越多,才知道自己不会的越多。自己的项目有一个留言的功能,就想着别人留言以后给管理员(我)发一个提示邮件,以便及时的回复消息。网站看了看才发现SpringBoot真的很厉害。我能想到的它都能实现。把自己的实现步骤整理一下:
一、开启邮箱SMTP服务
我用的是qq邮箱,开启SMTP服务步骤如下:
我这里是已经开启了,所以看不到,如果是第一次开启的话会生成一段字符,可以认为是邮箱的秘钥,这个需要记下。
二、引入依赖包
pom.xml文件中引入jar包
<!-- 支持发送邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
三、编辑配置文件
网上的配置文件五花八门,我试了好几个才找到适合我这个项目的。application.yml文件中增加如下信息:
spring:
mail:
host: smtp.qq.com
username: #你的邮箱地址
password: #之前保存的秘钥
default-encoding: UTF-8
port: 587
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
四、写服务类
@Component
public class MailUtil {
@Autowired
private JavaMailSender javaMailSender;
public void sendEmailToMe(Message message1) {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("你的邮箱地址");
helper.setTo("需要发送的对象的邮箱地址");
helper.setSubject("邮件主题");
String sb = MailUtil.toHtml2(message1);
helper.setText(sb, true);
} catch (MessagingException e) {
e.printStackTrace();
}
javaMailSender.send(message);
}
public static String toHtml2(Message message1){
String suject = message1.getSubject();
String name = message1.getFullname();
String msg = message1.getMessage();
String from = message1.getEmailaddress();
String phone = message1.getPhonenumber();
StringBuffer sb = new StringBuffer();
sb.append("<h3 style='color: #d9001f'>您有新的留言:</h3>");
sb.append("<p><strong>访客:</strong>"+name+"</p>");
sb.append("<p><strong>留言主题:</strong>"+suject+"</p>");
sb.append("<p><strong>他的电话:</strong>"+phone+"</p>");
sb.append("<p><strong>他的邮箱:</strong>"+from+"</p>");
sb.append("<p><strong>正文:</strong>"+msg+"</p>");
return sb.toString();
}
}
注:这段代码只是我的项目用到的,里面的内容可以根据需要自行修改。
五、调用服务
在需要用到邮件服务的类里面直接调用这个服务即可。我这里因为融合了之前的代码,比较凌乱。
@Autowired
private MailUtil mailUtil;
@PostMapping("/insert")
public RestUtil insert(HttpServletRequest request, Message message) throws Exception{
logger.info("新的留言");
RestUtil restUtil = new RestUtil();
String IP = IPUtil.getIpAddr(request);
message.setUserIp(IP);
if (messageService.insertSelective(message) > 0) {
restUtil.setMsg("我会尽快回复您的留言");
restUtil.setStatus(20000);
mailUtil.sendEmailToMe(message,IP);
logger.info("Ip为"+IP+"的用户留言了");
try {
mailUtil.sendEmailToVistor(message);
}catch (Exception e){
System.out.println("假的邮箱");
}
} else {
restUtil.setMsg("未知错误,请联系中边");
restUtil.setStatus(20001);
restUtil.setData(message);
}
return restUtil;
}
效果如下: