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