基于SpringBoot的邮件发送
1.导入依赖坐标
<!--邮件任务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
2.配置文件application.yml
spring:
mail:
username: **********@qq.com #填写自己的qq
password: kuhfxafzcxstfieh #填写自己的QQ邮箱授权码
host: smtp.qq.com
#开启加密验证
properties:
mail:
smtp:
enable: true
3.简单邮件发送
package shiro.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import shiro.demo.pojo.User;
import shiro.demo.service.UserService;
import javax.annotation.Resource;
@SpringBootTest
class ShiroDemoApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
//一个简单的邮件发送
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("测试邮件主题");//设置邮件的主题
message.setText("测试邮件内容"); //设置邮件的正文
message.setFrom("**********@qq.com"); //从哪里发
message.setTo("**********@qq.com"); //发向哪里
mailSender.send(message);
}
}
测试结果如下
4.复杂邮件发送
package shiro.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@SpringBootTest
class ShiroDemoApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("**********@qq.com");
helper.setTo("**********@qq.com");
helper.setSubject("测试邮件的主题");
//可以支持html
helper.setText("<h1>测试邮件的正文</h1>", true);
//附件
File file = new File("C:\\Users\\12523\\Desktop\\题.txt");
helper.addAttachment("附件的名称", file);
mailSender.send(message);
}
}
测试结果如下
发送失败
邮件发送有着很多的原因,如:配置过程中的端口号/授权码错误、550 DT:SPM主题/内容不规范被当做垃圾邮件、发送过于频繁、网络原因。所以只要编译器不报错,如果收不到邮件的话可以换个时间段多试几次。
封装成方法
package shiro.demo.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import shiro.demo.service.MailService;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 邮件发送服务实现类
*
* @Auther Shen
* @Date 2020-07-09
*/
@Service
public class MailServiceImpl implements MailService {
@Autowired
JavaMailSenderImpl mailSender;
//简单邮件发送
private SimpleMailMessage setSimpleMailMessage(String subject, String text, String from, String to) {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject(subject);//设置邮件的主题
message.setText(text); //设置邮件的正文
message.setFrom(from); //从哪里发
message.setTo(to); //发向哪里
return message;
}
//复杂邮件发送
private MimeMessageHelper setMimeMessage(MimeMessage message, String subject, String text, String from, String to, boolean html) throws MessagingException {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
//可以支持html
helper.setText(text, html);
return helper;
}
/**
* 一个简单的邮件发送
*
* @param subject
* @param text
* @param from
* @param to
*/
@Override
public void SendMessage(String subject, String text, String from, String to) {
SimpleMailMessage message = setSimpleMailMessage(subject, text, from, to);
mailSender.send(message);
}
/**
* 一个复杂的支持html的邮件发送
*
* @param subject
* @param text
* @param from
* @param to
* @param html
* @throws MessagingException
*/
@Override
public void SendMessage(String subject, String text, String from, String to, boolean html) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
setMimeMessage(mimeMessage, subject, text, from, to, html);
mailSender.send(mimeMessage);
}
/**
* 一个支持html且可以添加附件的邮件发送服务
*
* @param subject
* @param text
* @param from
* @param to
* @param filepath
* @param filename
* @param html
* @throws MessagingException
*/
@Override
public void SendMessage(String subject, String text, String from, String to, String filepath, String filename, boolean html) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = setMimeMessage(mimeMessage, subject, text, from, to, html);
//附件
File file = new File(filepath);
helper.addAttachment(filename, file);
mailSender.send(mimeMessage);
}
}