springBoot系列之邮件任务

 

目录

邮件发送原理 

邮件自动配置类分析

邮箱配置


引入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);
	}

测试

深层次参考:https://zhuanlan.zhihu.com/p/77671627 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值