重庆建设执业资格注册中心网站娄底手机网站制作

张小明 2026/1/12 7:54:47
重庆建设执业资格注册中心网站,娄底手机网站制作,h5做的公司网站,福州网站推广优化一、知识点背景 在 SpringBoot 项目中#xff0c;邮件发送是常见功能#xff08;如注册通知、告警推送#xff09;#xff0c;但单文本邮件无法满足复杂场景#xff08;如带样式的通知、多附件报表#xff09;。本文详解SpringBoot 3.x整合JavaMailSender实现多收件人 …一、知识点背景在 SpringBoot 项目中邮件发送是常见功能如注册通知、告警推送但单文本邮件无法满足复杂场景如带样式的通知、多附件报表。本文详解SpringBoot 3.x整合JavaMailSender实现多收件人 HTML 模板 附件的完整流程并解决实际开发中的常见问题。二、学习过程 步骤图文并茂步骤 1引入核心依赖pom.xml在 SpringBoot 项目中需引入邮件和模板引擎Thymeleaf依赖xml!-- SpringBoot邮件核心依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-mail/artifactId /dependency !-- Thymeleaf用于HTML邮件模板 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency步骤 2配置邮箱参数application.yml以 QQ 邮箱为例其他邮箱如网易 / 企业邮箱仅需修改服务器地址yamlspring: mail: # QQ邮箱SMTP服务器地址 host: smtp.qq.com # SMTP端口SSL加密 port: 465 # 发件人邮箱 username: 你的QQ邮箱qq.com # 注意不是QQ密码是邮箱“授权码”需在QQ邮箱设置中开启 password: 你的QQ邮箱授权码 # 加密方式SSL protocol: smtps properties: mail: smtp: auth: true starttls: enable: true required: true图 1QQ 邮箱 “POP3/SMTP 服务” 开启界面此处建议插入截图QQ 邮箱→设置→账户→开启 POP3/SMTP 服务的界面步骤 3封装通用邮件工具类实现多收件人、附件、HTML 模板的复用工具类java运行package com.example.mail.utils; import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import java.io.File; /** * SpringBoot邮件发送工具类支持多收件人、HTML模板、附件 */ Component public class MailSendUtils { private final JavaMailSender mailSender; private final TemplateEngine templateEngine; // 构造注入Spring推荐方式 public MailSendUtils(JavaMailSender mailSender, TemplateEngine templateEngine) { this.mailSender mailSender; this.templateEngine templateEngine; } /** * 发送带HTML模板多附件的邮件 * param to 收件人列表如{user1qq.com, user2163.com} * param subject 邮件主题 * param templateName Thymeleaf模板名如emailTemplate * param context 模板参数 * param attachments 附件列表 */ public void sendTemplateMailWithAttach( String[] to, String subject, String templateName, Context context, File[] attachments ) throws MessagingException { // 1. 创建MimeMessage支持多部分内容 MimeMessage mimeMessage mailSender.createMimeMessage(); // 2. 初始化Helpertrue支持多部分UTF-8避免中文乱码 MimeMessageHelper helper new MimeMessageHelper(mimeMessage, true, UTF-8); // 3. 设置邮件基础信息 helper.setFrom(你的QQ邮箱qq.com); // 发件人 helper.setTo(to); // 多收件人 helper.setSubject(subject); // 主题 // 4. 渲染Thymeleaf模板为HTML内容 String htmlContent templateEngine.process(templateName, context); helper.setText(htmlContent, true); // true内容是HTML // 5. 添加多个附件 if (attachments ! null attachments.length 0) { for (File file : attachments) { helper.addAttachment(file.getName(), file); } } // 6. 发送邮件 mailSender.send(mimeMessage); } }步骤 4编写 HTML 邮件模板在resources/templates下创建emailTemplate.htmlThymeleaf 模板html预览!DOCTYPE html html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 title【SpringBoot邮件测试】/title style .content { color: #333; font-size: 14px; line-height: 1.8; } .sign { color: #666; margin-top: 20px; } /style /head body div classcontent p您好span th:text${username}用户/span/p p这是一封来自SpringBoot的HTML模板邮件您的验证码是span stylecolor: #ff4d4f; font-weight: bold; th:text${code}123456/span/p /div div classsign p—— SpringBoot邮件测试团队/p /div /body /html图 2Thymeleaf 模板文件目录结构此处建议插入截图IDEA 中 resources/templates 下的 emailTemplate.html 位置步骤 5测试邮件发送Controller 层编写接口触发邮件发送java运行package com.example.mail.controller; import com.example.mail.utils.MailSendUtils; import jakarta.mail.MessagingException; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.thymeleaf.context.Context; import java.io.File; RestController public class MailController { private final MailSendUtils mailSendUtils; public MailController(MailSendUtils mailSendUtils) { this.mailSendUtils mailSendUtils; } GetMapping(/sendMail) public String sendMail() throws MessagingException { // 1. 收件人列表 String[] to {收件人1qq.com, 收件人2163.com}; // 2. 邮件主题 String subject SpringBoot邮件测试含模板附件; // 3. 模板参数 Context context new Context(); context.setVariable(username, 测试用户); context.setVariable(code, 888888); // 4. 附件示例本地的test.txt文件 File[] attachments {new File(D:/test.txt)}; // 调用工具类发送邮件 mailSendUtils.sendTemplateMailWithAttach(to, subject, emailTemplate, context, attachments); return 邮件发送成功; } }三、遇到的问题 解决过程问题 1MailAuthenticationException认证失败现象启动项目调用接口后控制台报错Authentication failed。原因邮箱未开启 “POP3/SMTP 服务”application.yml中password填的是 QQ 密码而非授权码。解决步骤登录 QQ 邮箱→设置→账户→开启 “POP3/SMTP 服务”生成 “授权码”需验证手机将password替换为授权码。问题 2附件发送后乱码现象收件人收到邮件后附件名称显示为乱码如 “????.txt”。原因MimeMessageHelper未指定编码格式。解决步骤在初始化MimeMessageHelper时显式指定编码为UTF-8java运行MimeMessageHelper helper new MimeMessageHelper(mimeMessage, true, UTF-8);问题 3SocketTimeoutException连接超时现象调用接口后长时间无响应最终报错Connection timed out。原因服务器防火墙屏蔽了 SMTP 端口如 465网络环境限制如公司内网禁止外部邮件连接。解决步骤测试端口连通性用telnet smtp.qq.com 465验证是否能连接若端口不通联系运维开放端口或切换为企业内网邮箱。四、总结 最佳实践核心总结SpringBoot 邮件发送的核心是JavaMailSender配合MimeMessageHelper实现复杂邮件多收件人通过helper.setTo(String[] to)实现附件通过helper.addAttachment()添加Thymeleaf 模板需放在resources/templates目录下通过TemplateEngine渲染为 HTML。生产环境最佳实践异步发送用Async注解 线程池异步发送避免阻塞业务线程java运行// 在工具类方法上添加Async Async public void sendTemplateMailWithAttach(...) { ... }异常重试结合Spring Retry实现邮件发送失败重试避免网络波动导致的单次失败日志记录记录邮件发送状态成功 / 失败便于排查问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

武昌做网站报价工作证明怎么写

3分钟掌握百度网盘文件快速转存:网页工具全攻略 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘下载速度而烦恼&#xff…

张小明 2026/1/12 2:57:46 网站建设

网站宣传册今天的最新消息

定制Knoppix Live CD全攻略 1. 制作Live CD的项目工具 在制作Live CD时,有两个项目提供了用于运行修改版安装程序以生成Live CD ISO镜像的工具: - Fedora Kadischi项目(搭配anaconda) :使用Fedora同名项目的 kadischi 命令,可启动一个流程,该流程会调用Fedora安装…

张小明 2026/1/3 0:00:08 网站建设

济南浩辰网站建设公司怎么样好的手机网站推荐

Kotaemon缓存机制优化揭秘:降低重复查询成本50% 在当前大模型应用快速落地的浪潮中,企业对智能问答系统的期待早已超越“能答出来”的基础要求,转而追求高响应速度、低运营成本与强一致性的综合体验。然而,在典型的检索增强生成&a…

张小明 2026/1/7 18:28:30 网站建设

宁波甬晟园林建设有限公司网站整站关键词快速排名

前言 这段时间挖掘了挺多的SRC漏洞,虽然都是一些水洞,也没有一些高级的漏洞挖掘利用手法,但是闲下来也算是总结一下,说说我对SRC漏洞挖掘的思路技巧。 很多人可能都挖过很多漏洞其中包括一些EDU或者别的野战,但是对于…

张小明 2026/1/3 1:06:43 网站建设

c 网站开发连接mysql问答推广的优势和不足

Miniconda中conda install与pip install的优先级与协同策略 在人工智能和数据科学项目中,一个常见的痛点是:代码在本地运行完美,但换到同事的机器或云端环境时却频频报错。追溯根源,往往不是算法问题,而是环境不一致—…

张小明 2026/1/10 13:49:35 网站建设

做网页设计的网站wordpress import

JSMpeg数据埋点:如何从零搭建播放器健康监控体系? 【免费下载链接】jsmpeg MPEG1 Video Decoder in JavaScript 项目地址: https://gitcode.com/gh_mirrors/js/jsmpeg "视频又卡了!"——这是每个前端工程师最怕听到的用户反…

张小明 2026/1/6 7:35:05 网站建设