Springboot2.6集成Email

Springboot集成Email 老版本

这时候的JavaMailSender是受到Spring的托管的,我们只需要配置参数就行了

!如何判断是否是被Springboot托管的:以下代码IDEA会自动有个bean标识

    @Autowired
    private JavaMailSender mailSender;

!另外点进去看到源码:是有bean注解的和自动装配的

    @Bean
    @ConditionalOnMissingBean
    public JavaMailSenderImpl mailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        this.applyProperties(sender);
        return sender;
    }

例如:

spring:
  mail:
    host: smtp.163.com
    password: XXXXX
    username: XXXX@163.com
    default-encoding: utf-8
    properties:
      timeout: 5000
      connection-timeout: 5000
      write-timeout: 5000
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
    port: 465

但是新版的Springboot集成Email有问题了

  • 我们在@Autowired的时候IDEA爆红!这是为什么呢,点击进去发现
  • MailSenderPropertiesConfiguration这个类没了!!!!
  • 压根就不被Spring托管了!根本就移除了自动装配的代码,我晕了,
  • 也就是配置在yml的无法使用了,但是现在怎么办!!

手动把这个bean配置上吧

    @Bean
    public JavaMailSender getMailSender() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setUsername(username);
        javaMailSender.setPassword(password);
        javaMailSender.setDefaultEncoding(encoding);
        javaMailSender.setHost(emailHost);
        javaMailSender.setPort(465);
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.ssl.enable", "true");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", emailHost);   // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");            // 须要请求认证
        javaMailSender.setJavaMailProperties(props);
        // 2. 根据配置建立会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        javaMailSender.setSession(session);
        return javaMailSender;
    }
}

然后调里面的方法就好使了!!!

posted on 2022-08-12 19:45  白嫖老郭  阅读(161)  评论(0编辑  收藏  举报

导航