springboot 发送QQ邮件和附件
1.
首先需要登录自己的QQ邮箱申请授权码
然后再该页面往下 开启第一个POP3/SMTP,这里需要发送相关信息到指定号码。
生成的授权码,复制保留,之后需要加载代码中
2.
在pom文件中添加依赖
<!--发送邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
yml文件中相应配置
server:
port: 8080
spring:
# ========================== ↓↓↓↓↓↓ 发送邮件配置(QQ邮箱) ↓↓↓↓↓↓ ==========================
mail:
host: smtp.qq.com
username: xxx@qq.com # 自己的QQ邮箱账号
password: xxxxxxxxxx # TODO 注:这里填写 在邮箱 设置 -> 账号 里面生成的`授权码` !!!
default-encoding: UTF-8
form: xxx@qq.com # 自己的QQ邮箱账号(邮件发送人地址)
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
springboot 相关代码 代码中的StringUtil就是上面pom文件中添加的第二个依赖 并不是其他的工具类
邮箱工具类
package com.example.util;
import java.io.File;
import javax.annotation.PostConstruct;
import javax.mail.internet.MimeMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import lombok.SneakyThrows;
@Component
public class EmailUtil {
private static JavaMailSender javaMailSender;
private static String formEmail;
@Value("${spring.mail.form}")
private String formEmail2;
@Autowired
private JavaMailSender javaMailSender2;
/**
* @PostConstruct该注解被用来修饰一个非静态的void()方法。
* 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
* Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
*/
@PostConstruct
public void beforeInit() {
javaMailSender = javaMailSender2;
formEmail = formEmail2;
}
/**
* 发送邮件 - 不带附件
*
* @param title:邮件标题
* @param content:
* 邮件内容
* @param sendTo:
* 收件人
* @return: void
*/
@SneakyThrows(Exception.class)
public static void sendMail(String title, String content, String... sendTo) {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发送人邮件地址
helper.setFrom(formEmail);
// 接收人邮件地址
helper.setTo(sendTo);
// 主题
helper.setSubject(title);
// html内容 (设置true标识发送html邮件)
helper.setText(content, true);
javaMailSender.send(message);
}
/**
* 发送邮件 - 带附件
*
* @param title:邮件标题
* @param content:
* 邮件内容
* @param attachmentFilename:附件文件名
* @param file:附件
* @param sendTo:
* 收件人
* @return: void
*/
@SneakyThrows(Exception.class)
public static void sendMail(String title, String content, String attachmentFilename, File file, String... sendTo) {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发送人邮件地址
helper.setFrom(formEmail);
// 接收人邮件地址
helper.setTo(sendTo);
// 主题
helper.setSubject(title);
// ① html内容 (设置true标识发送html邮件)
helper.setText(content, true);
// ② 附件
if (StringUtils.isNotBlank(attachmentFilename)) {
helper.addAttachment(attachmentFilename, file);
}
javaMailSender.send(message);
}
}
测试
package com.example.test;
import java.io.File;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.util.EmailUtil;
@RestController
public class TestController {
@RequestMapping("/api/test")
public String sendEmailTest() {
EmailUtil.sendMail("测试发送普通邮件", "尊敬的小可爱,五一假期放五天假哦!", "你想发送到的账号@qq.com");
//需在指定路径创建test.docx文件 然后以附件的形式发送
File file = new File("E:\\QQEMail\\User\\test.docx");
EmailUtil.sendMail("测试发送带附件邮件", "尊敬的小可爱", "test.docx", file, "你想发送到的账号@qq.com");
return "SUCCESS ~";
}
}
最后在浏览器中测试就可以了
原文地址https://zhengqing.blog.csdn.net/article/details/108677812