spring boot3整合邮件服务实现邮件发送功能
⛰️个人主页: 蒾酒
🔥系列专栏:《spring boot实战》
目录
内容概要
开通服务
依赖引入
配置属性
创建邮件发送工具类
测试
最近发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
点击跳转到学习网站
内容概要
本文介绍了spring boot整合email服务,实现发送验证码,邮件(普通文本邮件、静态资源邮件、附件邮件)。
坚持看完相信对你有帮助。
同时欢迎订阅springboot系列专栏,持续分享spring boot的使用经验。
开通服务
实现email服务需要先将自己的邮箱开通POP3/IMAP服务才可以通过该邮箱发送邮件,开通步骤如下:
这里以QQ邮箱为例
1.进入QQ邮箱官网
https://wx.mail.qq.com/
2.登录后点击设置
3.选择账号
找到 POP3/IMAP.....服务这里开启你的服务,这里我已经开启了的。
4.开启服务
开启成功会得到授权码 ,记住这个授权码。下面开始在spring boot中整合。
spring boot整合
1.依赖引入
pom.xml:
org.springframework.boot spring-boot-starter-mail
2.配置属性
application.yml:
修改成你自己的实际信息。
spring: #邮件服务配置 mail: host: smtp.qq.com #邮件服务器地址 protocol: smtp #协议 username: 305462*****@qq.com #发送邮件的邮箱也就是你开通服务的邮箱 password: fiwvcy******d #开通服务后得到的授权码 default-encoding: utf-8 #邮件内容的编码
3.创建邮件发送工具类
使用@component注解标记为组件,可以在Service中注入使用。
里面一共定义了几种发送邮件方法:
- 发送纯文本的普通邮件,可以发送一些纯文本的消息以及验证码内容。
- 发送简单HTML格式的文本内容,可以发验证码信息。
- 发送携带附件的邮件,比如word,excel,pdf文档或者其他文件。
- 发送高级HTML格式内容可以发一些静态资源,图片,音频,视频等。
具体可以根据业务需求调整代码。我实现的较为简单可以当个模板使用。
import jakarta.annotation.Resource; import jakarta.mail.internet.MimeMessage; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import java.io.File; import java.util.Objects; /** * @author mijiupro */ @Component @Slf4j public class EmailApi { @Resource private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from ;// 发件人 /** * 发送纯文本的邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendGeneralEmail(String subject, String content, String... to){ // 创建邮件消息 org.springframework.mail.SimpleMailMessage message = new org.springframework.mail.SimpleMailMessage(); message.setFrom(from); // 设置收件人 message.setTo(to); // 设置邮件主题 message.setSubject(subject); // 设置邮件内容 message.setText(content); // 发送邮件 mailSender.send(message); return true; } /** * 发送html的邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendHtmlEmail(String subject, String content, String... to){ // 创建邮件消息 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom(from); // 设置收件人 helper.setTo(to); // 设置邮件主题 helper.setSubject(subject); // 设置邮件内容 helper.setText(content, true); // 发送邮件 mailSender.send(mimeMessage); log.info("发送邮件成功"); return true; } /** * 发送带附件的邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 * @param filePaths 附件路径 * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendAttachmentsEmail(String subject, String content, String[] to, String[] filePaths) { // 创建邮件消息 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom(from); // 设置收件人 helper.setTo(to); // 设置邮件主题 helper.setSubject(subject); // 设置邮件内容 helper.setText(content,true); // 添加附件 if (filePaths != null) { for (String filePath : filePaths) { FileSystemResource file = new FileSystemResource(new File(filePath)); helper.addAttachment(Objects.requireNonNull(file.getFilename()), file); } } // 发送邮件 mailSender.send(mimeMessage); return true; } /** * 发送带静态资源的邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 * @param rscPath 静态资源路径 * @param rscId 静态资源id * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendInlineResourceEmail(String subject, String content, String to, String rscPath, String rscId) { // 创建邮件消息 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); // 设置发件人 helper.setFrom(from); // 设置收件人 helper.setTo(to); // 设置邮件主题 helper.setSubject(subject); //html内容图片 String contentHtml = "这是邮件的内容,包含一个图片:"+content+""; helper.setText(contentHtml, true); //指定讲资源地址 FileSystemResource res = new FileSystemResource(new File(rscPath)); helper.addInline(rscId, res); mailSender.send(mimeMessage); return true; } }
4.编写测试用例测试
下面测试前两种发送邮件的方法。
测试发送普通文本邮件
@SpringBootTest public class EmailTest { @Autowired private EmailApi emailApi; @Test public void sendEmail() { //发送邮件 boolean b = emailApi.sendGeneralEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com"); System.out.println(b); } }
修改成发送目标邮箱运行代码测试即可。
测试成功。
测试发送图片邮件
@SpringBootTest public class EmailTest { @Autowired private EmailApi emailApi; @Test public void sendEmail() { // 发送图片邮件 boolean b = emailApi.sendInlineResourceEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com", "C:\\Users\\mijiupro\\Desktop\\潮.jpg", "C:\\Users\\mijiupro\\Desktop\\潮.jpg"); System.out.println(b); } }
修改成发送目标邮箱运行代码测试即可。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。