1 分钟教会你用 Spring Boot 发邮件
Spring Boot 提供了一個(gè)發(fā)送郵件的簡(jiǎn)單抽象,使用的是下面這個(gè)接口。
org.springframework.mail.javamail.JavaMailSender
Spring Boot 提供了一個(gè)?starter,并能自動(dòng)配置,下面來(lái)做個(gè)小例子,順便解析它做了什么工作。
?
0、你所需具備的基礎(chǔ)
-
什么是 Spring Boot?
-
Spring Boot 核心配置文件詳解
-
Spring Boot 開(kāi)啟的 2 種方式
-
Spring Boot 自動(dòng)配置原理、實(shí)戰(zhàn)
-
Spring Boot 2.x 啟動(dòng)全過(guò)程源碼分析
?
1、添加依賴
在 Maven?pom.xml?配置文件中加入?spring-boot-starter-mail?依賴。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>?
2、添加配置參數(shù)
然后在?application.properties?文件中加入以下配置。
spring.mail.host=smtp.exmail.qq.com spring.mail.username=admin@javastack.cn spring.mail.password=123456#?啟動(dòng)SSL時(shí)的配置 spring.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory spring.mail.smtp.socketFactory.fallback=false spring.mail.smtp.socketFactory.port=465?
3、一個(gè)簡(jiǎn)單的發(fā)送郵件例子
寫一個(gè)控制器,寫一個(gè)簡(jiǎn)單的發(fā)送郵件的小例子,發(fā)送成功返回?true,發(fā)送失敗返回?false。
@Autowired private?JavaMailSender?javaMailSender;@RequestMapping("/sendEmail") @ResponseBody public?boolean?sendEmail()?{SimpleMailMessage?msg?=?new?SimpleMailMessage();msg.setFrom("admin@javastack.cn");msg.setBcc();msg.setTo("admin@javastack.cn");msg.setSubject("Java技術(shù)棧投稿");msg.setText("技術(shù)分享");try?{javaMailSender.send(msg);}?catch?(MailException?ex)?{System.err.println(ex.getMessage());return?false;}return?true; }?
4、自動(dòng)配置都做了什么?
Spring Boot 發(fā)現(xiàn)類路徑下有這個(gè)?spring-boot-starter-mail?包和?spring.mail.host?參數(shù)就會(huì)自動(dòng)配置?JavaMailSenderImpl。
上面那些?spring.mail.xx?參數(shù)用來(lái)裝配?MailProperties?這個(gè)類。
org.springframework.boot.autoconfigure.mail.MailProperties
自動(dòng)配置類:
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
@Configuration @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 {}}}?
org.springframework.boot.autoconfigure.mail.MailSenderPropertiesConfiguration
@Configuration @ConditionalOnProperty(prefix = "spring.mail", name = "host") class MailSenderPropertiesConfiguration {private final MailProperties properties;MailSenderPropertiesConfiguration(MailProperties properties) {this.properties = properties;}@Bean@ConditionalOnMissingBeanpublic JavaMailSenderImpl mailSender() {JavaMailSenderImpl sender = new JavaMailSenderImpl();applyProperties(sender);return sender;}private void applyProperties(JavaMailSenderImpl sender) {sender.setHost(this.properties.getHost());if (this.properties.getPort() != null) {sender.setPort(this.properties.getPort());}sender.setUsername(this.properties.getUsername());sender.setPassword(this.properties.getPassword());sender.setProtocol(this.properties.getProtocol());if (this.properties.getDefaultEncoding() != null) {sender.setDefaultEncoding(this.properties.getDefaultEncoding().name());}if (!this.properties.getProperties().isEmpty()) {sender.setJavaMailProperties(asProperties(this.properties.getProperties()));}}private Properties asProperties(Map<String, String> source) {Properties properties = new Properties();properties.putAll(source);return properties;}}?
其實(shí)就是用了上面裝配的參數(shù)注冊(cè)了一個(gè)?JavaMailSenderImpl?實(shí)例而已,然后你就可以注入使用了。
總結(jié)
以上是生活随笔為你收集整理的1 分钟教会你用 Spring Boot 发邮件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis 高可用特性之 “持久化” 详
- 下一篇: Spring 框架用到的 9 个设计模式