springBoot 发送邮件
1、引入依赖
<!--邮件发送 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2、参数信息配置
#邮箱相关配置信息 spring: mail: host: smtp.qq.com port: 465 username: 2423******@qq.com password: jngwodwc********* protocol: smtp default-encoding: UTF-8 properties: mail.smtp.auth: true mail.smtp.starttls.enable: true mail.smtp.starttls.required: true mail.smtp.socketFactory.port: 465 mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory mail.smtp.socketFactory.fallback: false from: 2423******@qq.com
其中password 为授权码,在邮箱设置中获取
qq邮箱的host为:smtp.qq.com
163邮箱的host为:smtp.163.com
3、邮箱实体类:
public class MailVo { private String id;// 邮件id private String from;// 邮件发送人 private String to;// 邮件接收人 private String subject;// 邮件主题 private String text;// 邮件内容 private Date sentDate;// 发送时间 private String cc; // 抄送 private String bcc; // 密送 private String status; // 状态 private String error; // 报错信息 @JsonIgnore private MultipartFile[] multipartFiles;// 邮件附件 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Date getSentDate() { return sentDate; } public void setSentDate(Date sentDate) { this.sentDate = sentDate; } public String getCc() { return cc; } public void setCc(String cc) { this.cc = cc; } public String getBcc() { return bcc; } public void setBcc(String bcc) { this.bcc = bcc; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getError() { return error; } public void setError(String error) { this.error = error; } public MultipartFile[] getMultipartFiles() { return multipartFiles; } public void setMultipartFiles(MultipartFile[] multipartFiles) { this.multipartFiles = multipartFiles; } @Override public String toString() { return "MailVo [id=" + id + ", from=" + from + ", to=" + to + ", subject=" + subject + ", text=" + text + ", sentDate=" + sentDate + ", cc=" + cc + ", bcc=" + bcc + ", status=" + status + ", error=" + error + ", multipartFiles=" + Arrays.toString(multipartFiles) + "]"; } }
4、邮箱发送工具类
@Component public class EmailUtils { @Autowired private JavaMailSenderImpl mailSender;//注入邮件工具类 @Async public MailVo sendMail(MailVo mailVo) { try { checkMail(mailVo); //1.检测邮件 sendMimeMail(mailVo); //2.发送邮件 return saveMail(mailVo); //3.保存邮件 } catch (Exception e) { mailVo.setStatus("fail"); mailVo.setError(e.getMessage()); //e.printStackTrace(); return mailVo; } } //检测邮件信息类 private void checkMail(MailVo mailVo) { if (StringUtils.isEmpty(mailVo.getTo())) { throw new RuntimeException("邮件收信人不能为空"); } if (StringUtils.isEmpty(mailVo.getSubject())) { throw new RuntimeException("邮件主题不能为空"); } if (StringUtils.isEmpty(mailVo.getText())) { throw new RuntimeException("邮件内容不能为空"); } } // 发送邮件 private void sendMimeMail(MailVo mailVo) { try { MimeMessage createMimeMessage = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(createMimeMessage, true,"UTF-8");//true表示支持复杂类型 String mailSendFrom = getMailSendFrom(); mailVo.setFrom(mailSendFrom);//邮件发信人从配置项读取 messageHelper.setFrom(mailSendFrom);//邮件发信人 messageHelper.setTo(mailVo.getTo().split(","));//邮件收信人 messageHelper.setSubject(mailVo.getSubject());//邮件主题 messageHelper.setText(mailVo.getText());//邮件内容 if (!StringUtils.isEmpty(mailVo.getCc())) {//抄送 messageHelper.setCc(mailVo.getCc().split(",")); } if (!StringUtils.isEmpty(mailVo.getBcc())) {//密送 messageHelper.setCc(mailVo.getBcc().split(",")); } if (mailVo.getMultipartFiles() != null) {//添加邮件附件 for (MultipartFile multipartFile : mailVo.getMultipartFiles()) { messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile); } } mailVo.setSentDate(new Date()); messageHelper.setSentDate(mailVo.getSentDate()); mailSender.send(createMimeMessage);//正式发送邮件 mailVo.setStatus("ok"); System.out.println(mailVo.toString()); } catch (Exception e) { throw new RuntimeException(e);//发送失败 } } //保存邮件 private MailVo saveMail(MailVo mailVo) { //将邮件保存到数据库.. return mailVo; } //获取邮件发信人 public String getMailSendFrom() { return mailSender.getJavaMailProperties().getProperty("from"); } }
邮件发送调用的方法为:
EmailUtils.send(mailVo)
本文来自博客园,作者:路易蓝,转载请注明原文链接:https://www.cnblogs.com/luyilan/p/13967831.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具