目录
引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
邮件发送原理
邮件自动配置类分析
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })
@ConditionalOnMissingBean(MailSender.class)
@Conditional(MailSenderCondition.class)
@EnableConfigurationProperties(MailProperties.class)
@Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
public class MailSenderAutoConfiguration {
/**
* Condition to trigger the creation of a {@link MailSender}. This kicks in if either
* the host or jndi name property is set.
*/
static class MailSenderCondition extends AnyNestedCondition {
MailSenderCondition() {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
@ConditionalOnProperty(prefix = "spring.mail", name = "host")
static class HostProperty {
}
@ConditionalOnProperty(prefix = "spring.mail", name = "jndi-name")
static class JndiNameProperty {
}
@EnableConfigurationProperties(MailProperties.class):
- 1.作用是@ConfigurationProperties生效并将MailProperties对象注入到IOC容器,交由容器管理
- 2.等价于MailProperties对象上加@Component和@ConfigurationProperties
@ConditionalOnMissingBean(MailSender.clas)
- 1. 仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean(网上解释)
- 2.Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息(百度解释)。
- 3.我的理解就是如果你自己在配置文件(@configration标注的类)中没有实例化这个对象(MailSender),默认会实例化个对象MailSender
@ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })
1.某个class位于类路径上,才会实例化一个Bean。即判断当前classpath下是否存在指定类,若是则将当前的配置装载入spring容器(网上解释)
邮箱配置
第一步:获取授权码(spring.mail.password的值)
在qq邮箱中---》 设置---》账户---》开启IMAP和SMTP服务---》点击生成授权码
按照提示发送短息就会出现授权码(保存这个授权码,下面使用)
第二步:由邮件发送原理可知,先发送给自己的邮箱服务器,(这里的地址就是spring.mail.host地址)
property或yml配置
简单邮件发送
package com.wxy.rabbit;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
class TestMailApplicationTests {
@Autowired
JavaMailSender javaMailSender;
/***
* 简单消息
*/
@Test
public void simpleMailSend() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//主题
simpleMailMessage.setSubject("简单邮件发送");
//邮件内容
simpleMailMessage.setText("测试简单邮件反送");
//qq邮箱
simpleMailMessage.setFrom("1790753131@qq.com");
//发送到163邮箱
simpleMailMessage.setTo("15638703595@163.com");
javaMailSender.send(simpleMailMessage);
}
}
SimpleMailMessage属性对应
复杂邮件发送(支持html,附件)
/***
* 可以发送附件
*/
@Test
public void complexMailSend() throws MessagingException {
//创建一个复杂的消息(html及上传附件等)
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//主题
helper.setSubject("带附件邮件发送");
//邮件内容html格式
helper.setText("<strong>测试带附件邮件发送</strong>",true);
//qq邮箱
helper.setFrom("1790753131@qq.com");
//发送到163邮箱
helper.setTo("15638703595@163.com");
//设置上传附件
helper.addAttachment("aa.pdf",new File("E:\\knowledge\\1.SSM订单操作.pdf"));
helper.addAttachment("bb.pdf",new File("E:\\knowledge\\1.SSM环境搭建与产品操作.pdf"));
javaMailSender.send(mimeMessage);
}
测试