当前位置: 首页 > news >正文

java 实现发送邮件功能

今天分享一篇 java 发送 QQ 邮件的功能

环境:

jdk 1.8 + springboot 2.6.3 + maven 3.9.6

邮件功能依赖:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

配置:

spring.mail.protocol=smtp
spring.mail.port=587
# qq邮箱
spring.mail.host=smtp.qq.com
# 发件人邮箱
spring.mail.username=xxx@qq.com
# 这里替换为自己的发件人邮箱的授权码
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

获取授权码:

登录 QQ 邮箱网页版 -> 设置 -> 账号

  

往下翻:找到下面这一块区域,如果没有开启服务的,直接开启服务即可 然后点击管理服务

 

 然后点击生成授权码

注意:生成后需要记住,授权码只展示这一次,如果忘了,可以生成多个

 

发送简单邮件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendSimpleMail();}public void sendSimpleMail() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(fromEmail); // 发件人邮箱message.setTo(toEmail);message.setSubject("主题:简单邮件");message.setText("内容:简单的邮件内容");mailSender.send(message);}
}

发送带附件的邮件

import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.mail.internet.MimeMessage;
import java.io.File;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendAttachmentsMail();}@SneakyThrowspublic void sendAttachmentsMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:有附件");helper.setText("内容:有附件的邮件");FileSystemResource file = new FileSystemResource(new File("C:\\Users\\11786\\Desktop\\blackground\\1.jpg"));// 这里可以上传多个文件,我这里就直接用一个文件了helper.addAttachment("file-1.jpg", file);helper.addAttachment("file-2.jpg", file);helper.addAttachment("file-2.jpg", file);mailSender.send(mimeMessage);}
}

使用 freemarker 发送模板邮件

在 resources -> templates -> email 目录下创建模板文件 template.ftl

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>邮件标题</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1 th:text="${username}">用户名</h1>
<p>这是一封模板邮件。</p>
</body>
</html>

发送邮件代码: 

import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.SneakyThrows;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.mail.internet.MimeMessage;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate Configuration freemarkerConfig;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendTemplateMail();}@SneakyThrowspublic void sendTemplateMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:模板邮件");// 创建数据模型Map<String, Object> model = new HashMap<>();model.put("username", "heyue");// 获取模板Template template = freemarkerConfig.getTemplate("email/template.ftl");// 渲染模板Writer out = new StringWriter();template.process(model, out);String htmlContent = out.toString();// 设置邮件内容helper.setText(htmlContent, true);// 发送邮件mailSender.send(mimeMessage);}
}

使用 thymeleaf 发送模板邮件

需要先引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

配置:

# 指定模板文件位置
spring.thymeleaf.prefix=classpath:/templates/email/
# 模板文件类型
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.template-resolver-order=1

在 resources -> templates -> email 目录下创建模板文件 template.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>邮件标题</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1 th:text="${username}">用户名</h1>
<p>这是一封模板邮件。</p>
</body>
</html>

发送邮件代码:

import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;import javax.mail.internet.MimeMessage;
import java.io.StringWriter;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate ApplicationContext applicationContext;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendTemplateMail();}@SneakyThrowspublic void sendTemplateMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:模板邮件");// 获取 Thymeleaf 模板引擎TemplateEngine templateEngine = applicationContext.getBean(TemplateEngine.class);// 创建上下文并设置变量Context context = new Context();context.setVariable("username", "heyue");// 渲染模板StringWriter writer = new StringWriter();templateEngine.process("template", context, writer);String htmlContent = writer.toString();// 设置邮件内容helper.setText(htmlContent, true);// 发送邮件mailSender.send(mimeMessage);}
}

相关文章:

  • YoloV8改进策略:BackBone改进|PKINet
  • 基于SpringBoot的高校办公室行政事务管理系统
  • 【C++】关联式容器——map和set
  • mysql80-DBA数据库学习1
  • C++入门:类和对象(上)
  • 车辆信息查询API:高效获取车牌号对应车辆的实时信息
  • 从0写一个问卷调查APP的第13天-1
  • MySQL基础复习
  • Python安装手册
  • 【课程】Java构架师42套阶段课程
  • vscode集成git管理项目
  • ensp ppp验证实验(二)
  • 低代码开发平台开源:依靠科技力量实现数字化转型!
  • Guava之EventBus源码分析
  • 从0到1:Java构建高并发、高可用分布式系统的实战经验分享
  • SegmentFault for Android 3.0 发布
  • Android框架之Volley
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • IDEA 插件开发入门教程
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript对象详解
  • JavaScript实现分页效果
  • JavaScript学习总结——原型
  • JS基础之数据类型、对象、原型、原型链、继承
  • Just for fun——迅速写完快速排序
  • 对象引论
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 解析 Webpack中import、require、按需加载的执行过程
  • 你不可错过的前端面试题(一)
  • 试着探索高并发下的系统架构面貌
  • 数据结构java版之冒泡排序及优化
  • 小程序01:wepy框架整合iview webapp UI
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​queue --- 一个同步的队列类​
  • #100天计划# 2013年9月29日
  • #QT(TCP网络编程-服务端)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (06)金属布线——为半导体注入生命的连接
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)STM32单片机上位机
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (南京观海微电子)——I3C协议介绍
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Transactional 竟也能解决分布式事务?
  • [17]JAVAEE-HTTP协议
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]