springboot发送邮件和定时发送
创建springboot项目
在搜索框里搜索一下mail 选择红色圈圈标记的 就可以下一步了
编写配置文件
实现发送邮件和定时发送
启动类上加上@EnableScheduling @EnableAsync项目里我没用所以加不加都可以
@SpringBootApplication
@EnableAsync //启用spring异步方法执行功能
@EnableScheduling //启用spring定时任务
public class MailApplication {
public static void main(String[] args) {
SpringApplication.run(MailApplication.class, args);
}
}
编写发送邮件的实现代码类
@Service
public class SendMail {
private final Logger logger= LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
/**
* 发送纯文本邮件
* @param to 邮件接收方
* @param subject 邮件主题
* @param text 邮件内容
*/
public void sendTextMail(String to,String subject,String text){
SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
/*
* 如果想给多个人发邮件 在后面接着添加 simpleMailMessage.setTo(xx@qq.com); simpleMailMessage.setTo(yy@qq.com);
* */
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(text);
try {
javaMailSender.send(simpleMailMessage);
logger.info("邮件已发送");
}catch (Exception e){
e.printStackTrace();
logger.error("邮件发送失败-"+e.getMessage());
}
}
/**
* 发送带附件的邮件
* @param to 邮件接收方
* @param subject 邮件主题
* @param text 邮件内容
* @param path 附件所在的文件路径
*/
public void sendAttachmentMail(String to,String subject,String text,String path){
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
//创建一个multipart格式的message
MimeMessageHelper mimeMessageHelper=new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(text,true);
//添加附件信息
FileSystemResource file=new FileSystemResource(new File(path));
String fileName = path.substring(path.lastIndexOf(File.separator));
mimeMessageHelper.addAttachment(fileName,file);
// 发送带附件的邮件
javaMailSender.send(mimeMessage);
logger.info("邮件发送成功");
}catch (Exception e){
e.printStackTrace();
logger.error("带有附件的邮件发送失败。" + e.getMessage());
}
}
}
编写测试类 可以使用单元测试 也可以定时发送 加上@Scheduled注解启动服务器就可以实现定时发送,我这里是30秒发送一次
@SpringBootTest
@RunWith(SpringRunner.class)
@Service
public class SendMailTest {
@Autowired
private SendMail sendMail;
private String toEmail="要发送到的邮箱";
/*
发送普通邮件
@Test
@Scheduled(cron="0/30 * * * * ?")
public void sendTextMail(){
sendMail.sendTextMail(toEmail,"邮件主题","邮件内容");
}*/
//发送带附件的邮件
@Test //为了单元测试才加的 对定时没有影响
@Scheduled(cron="0/30 * * * * ?")
public void sendAttachmentMail(){
sendMail.sendAttachmentMail(toEmail,"邮件主题","邮件内容","文件路径");
}
}