SpringBoot集成邮件模块
邮件协议
原文链接:https://blog.csdn.net/qq_37745470/article/details/89094227
什么是SMTP?
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
什么是IMAP?
IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
什么是POP3?
POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。
Spring提供的邮件服务接口和实现
JavaMailSender接口、JavaMailSenderImpl实现类
@Autowired
private JavaMailSenderImpl mailSender;
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("2708169628@qq.com");
simpleMailMessage.setTo("2708169628@qq.com");
simpleMailMessage.setSubject("尝试发送邮件");
simpleMailMessage.setText("一杯茶,一根烟,一个Bug改一天");
mailSender.send(simpleMailMessage);
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setFrom("2708169628@qq.com");
messageHelper.setTo("2708169628@qq.com");
messageHelper.setSubject("尝试发送附件");
messageHelper.setText("一杯茶,一根烟,一个Bug改一天!");
messageHelper.addInline("login.png", new File("login.png"));
messageHelper.addAttachment("work.docx", new File("work.docx"));
mailSender.send(mimeMessage);
Spring邮件服务的自动配置
MailSenderPropertiesConfiguration 自动配置类
@Configuration
@ConditionalOnProperty(prefix = "spring.mail", name = "host")
class MailSenderPropertiesConfiguration {
private final MailProperties properties;
MailSenderPropertiesConfiguration(MailProperties properties) {
this.properties = properties;
}
@Bean
@ConditionalOnMissingBean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
applyProperties(sender);
return sender;
}
MailProperties 参数配置
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
private String host;
private Integer port;
private String username;
private String password;
private String protocol = "smtp";
private Charset defaultEncoding = DEFAULT_CHARSET;
private Map<String, String> properties = new HashMap<>();
}
SpringBoot集成邮件服务
开启QQ邮箱的POP3、SMTP、IMAP协议,生成授权码
![在这里插入图片描述](https://img-blog.csdnimg.cn/c70c95cf22a44dd89c93c53011c7c9d6.png)
application.properties
server.port=8088
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.check-template-location=true
spring.thymeleaf.mode=HTML
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false
spring.mail.host=smtp.qq.com
spring.mail.username=2708169628@qq.com
spring.mail.password=mhilempuoluhdeja
spring.mail.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.from=liuy.yang@qq.com
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:8088/mail/send" method="post" accept-charset="UTF-8" enctype="multipart/form-data" name="mailVo">
收件人<input type="email" name="from"/>
发件人<input type="email" name="to"/>
主题<input type="text" name="subject"/>
正文<input type="text" name="text"/>
附件 <input type="file" name="file" multiple/>
<input type="submit">
</form>
</body>
</html>
后端参数接收VO
@Data
public class MailVO {
private String id;
private String from;
private String to;
private String subject;
private String text;
private Date sentDate;
private String cc;
private String bcc;
private String status;
private String error;
private MultipartFile[] multipartFiles;
}
邮件服务
package com.liu.mail.service;
import com.liu.mail.vo.MailVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
@RequestMapping("/mail")
public class MailServiceImpl {
@Autowired
JavaMailSenderImpl mailSender;
@PostMapping("/send")
public MailVO send(MailVO mailVo, HttpServletRequest request){
try {
MultipartHttpServletRequest multipartHttpServletRequest= (MultipartHttpServletRequest) request;
List<MultipartFile> file = multipartHttpServletRequest.getFiles("file");
MultipartFile[] multipartFiles=file.toArray(new MultipartFile[10]);
mailVo.setMultipartFiles(multipartFiles);
checkMail(mailVo);
sendMimeMail(mailVo);
return saveMail(mailVo);
} catch (Exception e) {
mailVo.setStatus("fail");
mailVo.setError(e.getMessage());
return mailVo;
}
}
private MailVO sendMimeMail(MailVO mailVo) {
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
messageHelper.setFrom(mailVo.getFrom());
messageHelper.setTo(mailVo.getTo().split(","));
messageHelper.setSubject(mailVo.getSubject());
messageHelper.setText(mailVo.getText());
if (mailVo.getMultipartFiles() != null) {
for (MultipartFile multipartFile : mailVo.getMultipartFiles()) {
if (multipartFile==null){
break;
}
messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
}
}
if (mailVo.getSentDate()==null) {
mailVo.setSentDate(new Date());
messageHelper.setSentDate(mailVo.getSentDate());
}
mailSender.send(messageHelper.getMimeMessage());
mailVo.setStatus("ok");
return mailVo;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void checkMail(MailVO mailVO) {
if (mailVO.getTo()==null) {
throw new RuntimeException("邮件收信人不能为空");
}
if (mailVO.getSubject()==null) {
throw new RuntimeException("邮件主题不能为空");
}
if (mailVO.getText()==null) {
throw new RuntimeException("邮件内容不能为空");
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)