一般企业开发包含:
- 邮件发送
- 定时任务
- 批处理
- Swagger2
- 数据校验
准备:
邮件发送常用于注册时的身份认证、重要通知等。Sun公司提供了JavaMail来实现邮件发送,但是配置繁琐。
Spring:提供了JavaMailSender
SpringBoot: 提供了MailSenderAutoConfiguration
需要做的准备:
- 登录QQ邮箱,找到账户:
- 找到POP3/SMTP服务,点击“开启”
我这里已经开启过,第一次开启需要按照提示发送短信获取授权码,拿到授权码后,准备工作就完成了。
这里的授权码在后面的代码配置处有用,如果忘记了可以点击“生成授权码”
此步骤会让 你发送短信,然后点击“已发送”,就可以获得上图的授权码。保存授权码,等哈会使用。
SpringBoot整合QQ邮箱:
1.新建项目,并添加邮件依赖:
2. 添加邮件的基本配置信息:
SSL配置可以查看QQ邮箱的帮助中心。
3.发送简单的邮件:
3.1 封装邮件的发送;
package com.yinlei.qqemail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
@Component
public class MailService {
/**
* JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
* 在Mail自动配置类MailSenderAutoConfiguration中导入。
*/
@Autowired
JavaMailSender javaMailSender;
/**
*
* @param from 邮件发送者
* @param to 收件人
* @param cc 抄送人
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setCc(cc);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
javaMailSender.send(simpleMailMessage);
}
}
3.2 测试发送:
4.发送带附件的邮件:【调用Attachment添加附件,调用多次可以添加多个附件】
只需要在上面的MailService.java中添加一个方法:
package com.yinlei.qqemail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Component
public class MailService {
/**
* JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
* 在Mail自动配置类MailSenderAutoConfiguration中导入。
*/
@Autowired
JavaMailSender javaMailSender;
/**
*
* @param from 邮件发送者
* @param to 收件人
* @param cc 抄送人
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setCc(cc);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
javaMailSender.send(simpleMailMessage);
}
/**
* 发送带附件的邮件
* @param from
* @param to
* @param subject
* @param content
* @param file
*/
public void sendAttachFileMail(String from, String to, String subject, String content, File file){
try {
MimeMessage message = javaMailSender.createMimeMessage();
//参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content);
//添加附件
helper.addAttachment(file.getName(),file);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
测试发送:
5.发送带图片资源的邮件:
当邮件的正文内容需要插入图片的时候,可以使用FileSystemResource实现:
package com.yinlei.qqemail;
import org.springframework.beans.factory.annotation.Autowired;
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.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Component
public class MailService {
/**
* JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
* 在Mail自动配置类MailSenderAutoConfiguration中导入。
*/
@Autowired
JavaMailSender javaMailSender;
/**
*
* @param from 邮件发送者
* @param to 收件人
* @param cc 抄送人
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setCc(cc);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
javaMailSender.send(simpleMailMessage);
}
/**
* 发送带附件的邮件
* @param from
* @param to
* @param subject
* @param content
* @param file
*/
public void sendAttachFileMail(String from, String to, String subject, String content, File file){
try {
MimeMessage message = javaMailSender.createMimeMessage();
//参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content);
//添加附件
helper.addAttachment(file.getName(),file);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 发送带图片资源的邮件
* @param srcPath 图片资源路径
* @param resIds 资源id
*/
public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
if (srcPath.length!=resIds.length){
System.out.println("发送失败");
return;
}
try{
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
for (int i=0;i<srcPath.length;i++){
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
helper.addInline(resIds[i],res);//将资源添加到邮件对象
}
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
}
6.使用模板引擎构建邮件模板(FreeMarker或Thymeleaf)
这里以Thymeleaf演示:
6.1 添加依赖:
6.2创建模板:
package com.yinlei.qqemail;
import org.springframework.beans.factory.annotation.Autowired;
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.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Component
public class MailService {
/**
* JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
* 在Mail自动配置类MailSenderAutoConfiguration中导入。
*/
@Autowired
JavaMailSender javaMailSender;
/**
*
* @param from 邮件发送者
* @param to 收件人
* @param cc 抄送人
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setCc(cc);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
javaMailSender.send(simpleMailMessage);
}
/**
* 发送带附件的邮件
* @param from
* @param to
* @param subject
* @param content
* @param file
*/
public void sendAttachFileMail(String from, String to, String subject, String content, File file){
try {
MimeMessage message = javaMailSender.createMimeMessage();
//参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content);
//添加附件
helper.addAttachment(file.getName(),file);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 发送带图片资源的邮件
* @param srcPath 图片资源路径
* @param resIds 资源id
*/
public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
if (srcPath.length!=resIds.length){
System.out.println("发送失败");
return;
}
try{
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
for (int i=0;i<srcPath.length;i++){
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
helper.addInline(resIds[i],res);//将资源添加到邮件对象
}
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
/**
* 使用模板引擎
*/
public void sendHtmlMail(String from ,String to,String subject,String content){
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setTo(to);
helper.setFrom(from);
helper.setSubject(subject);
helper.setText(content,true);
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
}