springboot 发送邮箱附件遇见的奇葩事
2021-06-28 本文已影响0人
进击的奥莉
今天,老板突然接到一个需求,要求给客户发邮件,并将线上文件作为附件本以为是个很easy的功能,想着两个小时绝对搞定,没想到花费了我两天时间,还请教了高手。
在网上搜索,发现没人提起我所遇见的问题,今天记录一下,希望帮到有需要的人。
1. 开启邮箱授权码
-
开启QQ授权码
开启QQ授权码.png -
开启网易授权码
开启网易授权码.png - 开启企业邮箱授权码
开启企业邮箱授权码1.png
开启企业邮箱授权码2.png
注:修改完一定记得点击保存修改,不然不生效哈
2. 接下来进入springboot 代码书写阶段,pom.xml 引入依赖
因为是前后端分离,所以只需要引入一个依赖,且此依赖没有版本号
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3. yml文件中配置email信息
mail要紧挨着spring,否则配置不生效
application.yml
spring:
mail: #这个mail一定要紧挨spring,否则配置可能会无效
host: smtp.exmail.qq.com
port: 587 # 我设置465无效,企业邮箱改为587才生效
protocol: smtp # 和邮箱设置里保持一致
username: test1111@qiye.com
password: yjFCZ****8jTzfPf # 授权码,不是登录密码哟
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
4. 发送附件代码
/**
* 发送带附件的邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
* @param filePath 附件
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message,true);
messageHelper.setFrom(from);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content,true);
//携带远程地址附件
URL url = new URL(filePath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
String filename = subject.substring(0,subject.length()-10).concat(".pdf");
messageHelper.addAttachment(filename, new ByteArrayResource(IOUtils.toByteArray(is)));
// 携带本地附件
//FileSystemResource file = new FileSystemResource(filePath);
//String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
//messageHelper.addAttachment(fileName,file);
javaMailSender.send(message);
log.info("邮件加附件发送成功!");
} catch (MessagingException | javax.mail.MessagingException e) {
log.error("发送失败:"+e);
}catch (FileNotFoundException e2) {
log.error("发送失败:"+e2);
}catch (Exception e3) {
log.error("发送失败:"+e3);
e3.printStackTrace();
}
}
** 大功告成 **
值得注意的是:
- yml里面的mail配置要紧挨着spring写,我是因为写在最后面一直读取不到配置,怎么调试都不行
2.因为是附件,需要在yml里面添加上传文件大小的限制
spring:
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
3.如果邮箱端口号设置465无效,修改为587尝试一下