spring-boot-starter-mail 邮件发送
Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。
开通POP3/SMTP服务或者IMAP/SMTP服务
使用邮箱发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。
SMTP全称为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。
添加邮件依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
邮件基本信息配置:
spring:
mail:
host: smtp.xxx.com
username: xxx@xxx.com
password: xxx
default-encoding: UTF-8
properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
properties.mail.debug: true
发送简单邮件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | @Component public class MailService { /** * JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的, * 该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了。 */ @Autowired JavaMailSender javaMailSender; /** * sendSimpleMail方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。 * * @param from 发送者 * @param to 收件人 * @param cc 抄送人 * @param subject 主题 * @param content 内容 */ public void sendSimpleMail(String from, String to, String cc, String subject, String content) { // 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去。 SimpleMailMessage simpMsg = new SimpleMailMessage(); simpMsg.setFrom(from); simpMsg.setTo(to); simpMsg.setCc(cc); simpMsg.setSubject(subject); simpMsg.setText(content); javaMailSender.send(simpMsg); } } |
发送带附件的邮件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /** * 发送带附件的邮件 * * @param from 发送者 * @param to 收件人 * @param subject 主题 * @param content 内容 * @param file 附件 */ public void sendAttachFileMail(String from, String to, String subject, String content, File file) { try { MimeMessage message = javaMailSender.createMimeMessage(); /* * 这里使用MimeMessageHelper简化了邮件配置, * 它的构造方法的第二个参数true表示构造一个multipart message类型的邮件, * multipart message类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富 */ MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content); helper.addAttachment(file.getName(), file); javaMailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } |
发送带图片资源的邮件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /** * 发送带图片资源的邮件 * * @param from 发送者 * @param to 收件人 * @param subject 主题 * @param content 内容 * @param srcPath 图片资源路径 * @param resIds 资源id */ public void sendMailWithImg(String from, String to, String subject, String content, String[] srcPath, String[] resIds) { if (srcPath.length != resIds.length) { System.out.println( "发送失败" ); return ; } try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true ); //第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。 for ( int i = 0 ; i < srcPath.length; i++) { FileSystemResource res = new FileSystemResource( new File(srcPath[i])); //通过FileSystemResource构造静态资源 helper.addInline(resIds[i], res); //调用addInline方法将资源加入邮件对象中 } javaMailSender.send(message); } catch (MessagingException e) { System.out.println( "发送失败" ); } } |
使用Thymeleaf构建邮件模板:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void sendHtmlMail(String from, String to, String subject, String content) { try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setTo(to); helper.setFrom(from); helper.setSubject(subject); helper.setText(content, true ); javaMailSender.send(message); } catch (MessagingException e) { System.out.println( "发送失败" ); } } |
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | @RunWith (SpringRunner. class ) @SpringBootTest public class MailServiceTest { @Autowired MailService mailService; @Test public void sendSimpleMail() { mailService.sendSimpleMail( "xxx@xxx.com " , "xxx@xxx.com " , "xxx@xxx.com " , "测试邮件主题" , "测试邮件内容" ); } @Test public void sendAttachFileMail() { mailService.sendAttachFileMail( "xxx@xxx.com " , "xxx@xxx.com " , "测试邮件主题sendAttachFileMail" , "测试邮件内容sendAttachFileMail" , new File( "C:\\Usersxxx\\Desktop\\导出导入\\邮件附件.docx" )); } @Test public void sendMailWithImg() { mailService.sendMailWithImg( "xxx@xxx.com " , "xxx@xxx.com " , "测试邮件主题(图片)" , "<div>hello,这是一封带图片资源的邮件:" + "这是图片1:<div><img src='cid:p01'/></div>" + "这是图片2:<div><img src='cid:p02'/></div>" + "</div>" , new String[]{ "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg" , "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg" }, new String[]{ "p01" , "p02" }); } @Autowired TemplateEngine templateEngine; @Test public void sendHtmlMailThymeleaf() { /* * Thymeleaf提供了TemplateEngine来对模板进行渲染,通过Context构造模板中变量需要的值 */ Context ctx = new Context(); ctx.setVariable( "username" , "sang" ); ctx.setVariable( "gender" , "男" ); String mail = templateEngine.process( "mailtemplate.html" , ctx); mailService.sendHtmlMail( "xxx@xxx.com " , "xxx@xxx.com " , "测试邮件主题Thymeleaf" , mail); } } |
文章来源: Spring Boot+Vue全栈开发实战 - 13.1 邮件发送
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!