在实际开发中,邮件发送服务是网站的必备功能之一,例如用户注册验证、忘记密码、给用户发送营销信息等。在早期开发过程中,开发人员通常会使用JavaMail相关API实现邮件发送功能,后来Spring推出JavaMailSender简化了邮件发送的过程和实现,springBoot框架对Spring 提出的邮件发送服务也进行了整合支持。下面我们就针对springBoot框架整合支持的邮件任务进行实现。
1.SpringBoot邮件发送服务
1.1导包
<!-- mail发送 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
1.2 配置SpringBoot全局文件
登录QQ邮箱,设置-账户-开启服务:POP3/SMTP服务
开启“POP3/SMTP服务”,获得的授权码为下面spring.mail.password的值。
#发件人邮箱服务器相关配置
## QQ邮箱固定以下配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
#配置个人QQ账号和密码(密码是加密后的授权码)
## 你的邮箱账号
spring.mail.username=666677788@qq.com
## QQ邮箱开启POP3/SMTP服务后的授权码
spring.mail.password=rbnftozzextzbbea
spring.mail.default-encoding=utf-8
#邮件服务超时时间配置
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
1.3 新建邮件发送Service
在service下新建两个接口,一个是发送纯文本邮件,一个是发送带附件的邮件:
public interface EmailSendService {
//纯文本邮件信息发送
public boolean sendSimpleEmail(String toEmailAddress, String subject, String text);
//带附件邮件信息发送
public boolean sendAttachmentEmail(String toEmailAddress, String subject, String text, String filePath);
}
创建serviceImpl:
package cn.com.***;
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Component
@Slf4j
public class EmailSendServiceImpl implements EmailSendService {
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String fromEmailAddress;
/**
*
* @param toEmailAddress 收件人地址
* @param subject 邮件主题
* @param text 邮件内容
* @return 发送成功true
*/
public boolean sendSimpleEmail(String toEmailAddress, String subject, String text){
//定制纯文本邮件信息SimpleMailMessage
SimpleMailMessage message=new SimpleMailMessage();
try {
message.setFrom(fromEmailAddress); //设置发件箱
message.setTo(toEmailAddress); //设置收件箱
message.setSubject(subject); //设置邮件主题
message.setText(text); //设置邮件内容
mailSender.send(message); //调用Java封装好的发送方法
return true;
}catch (Exception e){
log.debug("文本邮件发送失败");
throw new BizException(e.toString());
}
}
/**
*
* @param toEmailAddress 收件人地址
* @param subject 邮件主题
* @param text 邮件内容
* @param filePath 附件本地路径
* @return 发送成功true
*/
public boolean sendAttachmentEmail(String toEmailAddress, String subject, String text, String filePath){
//定制复杂邮件信息MimeMessage
MimeMessage message=mailSender.createMimeMessage();
try {
//使用MimeMessageHelper帮助类,并设置multipart多部件使用为true。帮助将邮件信息封装到MimeMessage message中
MimeMessageHelper helper=new MimeMessageHelper(message,true);
helper.setFrom(fromEmailAddress); //设置发件箱
helper.setTo(toEmailAddress); //设置收件箱
helper.setSubject(subject); //设置邮件主题
helper.setText(text,true); //设置邮件内容
//设置邮件静态资源
//FileSystemResource res=new FileSystemResource(new File(rscPath));
//helper.addInline(rscId, res);
//设置附件地址
FileSystemResource file=new FileSystemResource(new File(filePath));
String fileName=filePath.substring(filePath.lastIndexOf(File.separator)); //也可以自己命名
helper.addAttachment(fileName, file);
//发送邮件
mailSender.send(message);
log.debug("复杂邮件发送成功");
return true;
} catch (MessagingException e) {
log.debug("复杂邮件发送失败。。。。。。");
throw new BizException(e.toString());
}
}
}
调用上面接口就可以实现邮件发送啦
Tips
邮件内容是简单的String文本的话,字体样式布局为邮件默认的样式。
如果想实现自定义邮件文本主题样式,可以将邮件内容text采用以下方式写入:
//定义带格式的邮件内容
StringBuilder text = new StringBuilder();
text.append("<html><head></head>");
text.append("<body><h1>祝大家新年快乐!</h1>");
text.append("********恭喜发财*********</body>");
text.append("</html>");