邮件发送在我们的日常开发中也非常的多,Springboot帮我们做了支持
我们去找一下关于Mail的自动配置类,发现有一个MailSenderAutoConfiguration
,点进去
@EnableConfigurationProperties({MailProperties.class})
有关Mail的配置属性都在MailProperties.class
中定义好了
@ConfigurationProperties(
prefix = "spring.mail"
)
public class MailProperties {
private static final Charset DEFAULT_CHARSET;
private String host;
private Integer port;
private String username;
private String password;
private String protocol = "smtp";
private Charset defaultEncoding;
private Map<String, String> properties;
private String jndiName;
......
}
那么这些配置属性又是被哪些Bean获取的呢
回到MailSenderAutoConfiguration
这个类,发现它并没有注册Bean
@Import({MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class})
点进导入的这两个类,发现MailSenderPropertiesConfiguration
中注册了一个Bean,JavaMailSenderImpl
@Bean
@ConditionalOnMissingBean({JavaMailSender.class})
JavaMailSenderImpl mailSender(MailProperties properties) {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
this.applyProperties(properties, sender);
return sender;
}
引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.6.3</version>
</dependency>
开启邮箱的POP3/SMTP服务
配置相关属性
spring.mail.username=你的邮箱地址
spring.mail.password=授权码
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
单元测试
@SpringBootTest
class Springboot05ApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
public void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("通知");
message.setText("今晚20:30开会");
message.setTo("邮箱地址");
message.setFrom("邮箱地址");
mailSender.send(message);
}
@Test
public void contextLoads2() throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("你有新消息了");
helper.setText("<b style='color:red'>今天 17:30来开会</b>",true);
helper.addAttachment("1.jpg",new File("E:\\1.jpg"));
helper.setTo("邮箱地址");
helper.setFrom("邮箱地址");
mailSender.send(mimeMessage);
}
}