SpringBoot-简化发送邮件

准备

依赖

<!--mail-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

按照之前我们了解的SpringBoot的自动装配原理,试着搜一搜MailAutoConfiguration,看看有没有这个类,结果还真有。不过他叫MailSenderAutoConfiguration ,那就接着看看MailProperties呗!!

@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 {
		}
	}
}

MailProperties我们可以明确的看见,他的内部就是我们之前在java-web时写的那些熟悉的配置。我们只需在application.yaml中修改就可以了。

@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
	private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
	//SMTP server host. For instance, `smtp.example.com`.
	private String host;
	// SMTP server port.
	private Integer port;
	// Login user of the SMTP server.
	private String username;
	// Login password of the SMTP server.
	private String password;
	// Protocol used by the SMTP server.
	private String protocol = "smtp";
	// Default MimeMessage encoding.
	private Charset defaultEncoding = DEFAULT_CHARSET;
	//Additional JavaMail Session properties.
	private Map<String, String> properties = new HashMap<>();
	// Session JNDI name. When set, takes precedence over other Session settings.		
	private String jndiName;
	……
}

配置application.yaml

spring:
  mail:
    username: 1287038845@qq.com
    password: lncnwzwgwltohbih
    host: smtp.qq.com
    #开启加密验证
    properties:
      mail:
        smtp:
          ssl:
            enable: true

测试代码:

@SpringBootTest
public class MailTest {
    @Autowired
    JavaMailSenderImpl mailSender;

    //简单邮件
    @Test
    public void contextLoads(){
        SimpleMailMessage mailMessage = new SimpleMailMessage();

        mailMessage.setSubject("你好啊!!");
        mailMessage.setText("这是一个测试邮件,springboot邮件!!");
        mailMessage.setTo("1287038845@qq.com");
        mailMessage.setFrom("1287038845@qq.com");

        mailSender.send(mailMessage);
    }

    //复杂邮件
    @Test
    public void contextLoads2() throws MessagingException {
        MimeMessage mimeMessage=mailSender.createMimeMessage();
        //组装
        MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true,"utf-8");;

        //正文
        helper.setSubject("你好啊!!这是一个复杂测试邮件!!");
        //解析html
        helper.setText("<h3 style='color:pink'>这是一个复杂测试邮件!!</h3>",true);
        //附件
        helper.addAttachment("girl.jpg",new File("D:\\springboot-mail\\src\\main\\resources\\gril.jpg"));


        helper.setTo("1287038845@qq.com");
        helper.setFrom("1287038845@qq.com");

        mailSender.send(mimeMessage);
    }
}

测试结果1:
在这里插入图片描述
测试结果2:
在这里插入图片描述

用到的几个类

JavaMailSenderImpl

制作{@link Java邮件发送器}接口的实现,
支持Java邮件{@linkMime消息MIME消息}和Spring{@链接简单邮件消息简单邮件消息}.
也可以用作普通的{@链接org.springframework.mail。 邮件发件人}实现,
允许将所有设置本地定义为bean属性。
或者,可以预先配置JavaMail{@link javax.mail.Session}指定,
可能从应用服务器的JNDI环境中提取。
此对象中的非默认属性将始终覆盖设置在Java邮件{@代码会话}中。
注意,如果在本地覆盖所有值,在设置预先配置的{@code Session}时没有附加值。

SimpleMailMessage、MimeMessage

前者是简单的邮件,后者是复杂邮件(包含html、附件等)。

MimeMessageHelper

这是一个帮助类, org.springframework.mail的简单设置器。 简单邮件消息,将数值直接应用于底层MIME消息。 允许定义由所有方法自动应用的整个消息的字符编码提供对HTML文本内容、图像等内联元素和典型元素的支持邮件附件。 还支持伴随邮件地址的个人姓名。 请注意,高级设置仍然可以直接应用于底层MIME消息对象!
他提供不同构造器给我们选择使用。例如:是否解析html,编码格式等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值