邮箱设置
启用客户端POP/SMTP服务,获取授权码,之后用程序登录邮箱时要使用授权码作为密码
导入jar包
导入spring boot mail starter依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
存在问题:javax.mail不存在
解决方案:
-
导入javax.mail包:上文是springboot整合的java mail,理论上只导入它就行了,但是jdk可能会报错说找不到javax.mail,原因可能是maven导入的是jarkata.mail,名字不匹配,需要再导入一个javax.mail包。
<dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version> </dependency>
-
限制spring boot mail starter包的版本。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.1.5.RELEASE</version> </dependency>
邮箱参数配置
# 发送邮件使用的邮箱域名 Protocol used by the SMTP server.
spring.mail.host = smtp.sina.com
# 发送邮件使用的端口,发送邮件的端口一般默认都是465
spring.mail.port = 465
# 发送邮件使用的协议(协议加s表示使用的是加密的安全协议)
spring.mail.protocol = smtps
# 邮箱账号、密码(开启pop/stmp后要使用授权码作为登陆密码)
spring.mail.username = proj_nowcoder@sina.com
spring.mail.password = proj_nowcoder123
# spring.mail.properties.* :其他更详尽的配置
# 发送邮件时采用ssl安全连接
spring.mail.properties.mail.smtp.ssl.enable = true
发送邮件
简单的邮件我们可以通过SimpleMailMessage来发送,对于复杂的带有附件(如html、图片、附件等)的我们可以借助MimeMessageHelper来构建MimeMessage发送邮件。
我们以后都按发送复杂邮件的方式写代码
// 邮件组件
// 用Component表示是一个通用的bean,在哪个层次都可以用
@Component
public class MailClient {
private Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired
// 发送邮件的核心组件
private JavaMailSender javaMailSender;
// 邮件三要素:发送邮箱 接收邮箱 标题内容
// 通过服务器发邮件,发送邮箱都是固定的,就是配置文件中配置的username
@Value("${spring.mail.username}") // 使用properties文件中配置的邮箱,可通过key来获取
private String from;
/**
* 用于发送邮件
* @param to 发送目标
* @param subject 主题
* @param content 内容
*/
public void sendMail(String to, String subject, String content){
try {
// 1. 通过JavaMailSender中方法构建发邮件所需的MimeMessage对象
MimeMessage message = javaMailSender.createMimeMessage();
// 2. MimeMessageHelper帮助类,帮助构建MimeMessage中内容
MimeMessageHelper helper = new MimeMessageHelper(message);
// 3. 设置邮件
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
// setText(邮件内容, 内容格式是否支持html格式文本)
helper.setText(content,true);
// 4. 发送邮件
javaMailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
// 日志记录错误原因
logger.error("发送邮件失败,原因:"+e.getMessage());
e.printStackTrace();
}
}
}
发送普通文本邮件测试
@SpringBootTest
@ContextConfiguration(classes = Springdemo1Application.class)
public class MailTests {
@Autowired
private MailClient mailClient;
@Test
public void textMailTest(){
mailClient.sendMail("test@qq.com", "发送邮件测试", "Welcome.");
}
}
发送html邮件测试
动态页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>这是一个html版测试邮件</title>
</head>
<body>
<p>
欢迎你, <span style="color:red;" th:text="${username}"> !</span>
</p>
</body>
</html>
测试
@SpringBootTest
@ContextConfiguration(classes = Springdemo1Application.class)
public class MailTests {
@Autowired
private MailClient mailClient;
@Autowired
// 模板引擎
private TemplateEngine templateEngine;
/**
* 发送html邮件
*/
@Test
public void htmlMailTest(){
// MVC中Controller可以通过页面路径直接调用html页面
// 而测试类中,必须利用模板引擎调用模板
// 1. 构建模板所需参数
Context context = new Context();
context.setVariable("username", "LayZhang");
// 2. 获取指定html页面的内容(String类型)
String content = templateEngine.process("/demo/mail",context);
System.out.println(content);
// 3. 发送邮件
mailClient.sendMail("test@qq.com", "发送html邮件测试",content);
}
}
参考文章
https://blog.csdn.net/weixin_51764982/article/details/122797092
一些选择题
D
C
AD
in_51764982/article/details/122797092
一些选择题
[外链图片转存中…(img-6aqVBf00-1709220954588)]
D
[外链图片转存中…(img-9Xo3deVi-1709220954589)]
C
[外链图片转存中…(img-1FOOlmMO-1709220954590)]
AD