栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

SpringBoot实现qq邮箱发送邮件

Java 更新时间:发布时间: 百科书网 趣学号

SpringBoot实现qq邮箱发送邮件
  • 一、导入springboot提供的依赖
  • 二、在配置文件中设置邮箱信息
  • 设置邮箱
  • 三、设置邮件内容等
  • 四、设置发送邮箱为单独的线程操作


一、导入springboot提供的依赖
  
        
            org.springframework.boot
            spring-boot-starter-mail
        
二、在配置文件中设置邮箱信息 设置邮箱
spring.mail.host=smtp.qq.com

spring.mail.port=465

spring.mail.protocol=smtp
# 发送邮箱的账号
spring.mail.username=XXXXX@qq.com
# 此为开通qq邮箱POP3/SMTP服务之后的激活码
spring.mail.password=********

spring.mail.default-encoding=UTF-8

spring.mail.test-connection=true
# 可以不用设置
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.debug=true
三、设置邮件内容等
@Component
public class RegisterEmailService {

    @Value("${spring.mail.username}")
    private String fromEmail;

    @Autowired
    private JavaMailSender javaMailSender;

    @Async
    public void sendEmail(String toEmail){
        // 验证真的使用我们自己线程
        System.out.println(Thread.currentThread().getName());
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置发件人账号
        message.setFrom(fromEmail);
        // 设置收件人账号
        message.setTo(toEmail);
        // 设置邮件标题
        message.setSubject("【Lyman】注册激活邮件");
        // 设置邮件内容
        String content = "您的注册已成功,请点击链接去激活";
        message.setText(content);
        javaMailSender.send(message);
    }
}

@Async:开启异步,为springboot提供的注解,我们可以重写它的线程池

四、设置发送邮箱为单独的线程操作
@EnableAsync
@Configuration(proxyBeanMethods = false)
public class EmailThreadPool implements AsyncConfigurer {
    //处理线程执行过程中异常(记录日志:保存现场)
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return AsyncConfigurer.super.getAsyncUncaughtExceptionHandler();
    }

    private static final int CORE_POOL_SIZE = 2;
    private static final int MAX_POOL_SIZE = 5;
    private static final int KEEP_ALIVE_SECONDS = 10;
    
    private static final String THREAD_NAME_PREFIX = "email-thread-";
    
    private static final int QUEUE_CAPACITY = 1000;

    
    @Override
    public Executor getAsyncExecutor() {
        //  使用 spring 提供的线程池 定制操作
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 1.设置核心线程数
        executor.setCorePoolSize(CORE_POOL_SIZE);
        // 2.设置最大线程数
        executor.setMaxPoolSize(MAX_POOL_SIZE);
        // 3.设置空闲线程存活时间
        executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS);
        // 5. 设置线程工厂 (使用是JUC 线程工具类Executors 提供线程工厂 )
        executor.setThreadFactory(new CustomizableThreadFactory(THREAD_NAME_PREFIX));
        // 6. 线程任务队列要使用有界(有限的)队列
        executor.setQueueCapacity(QUEUE_CAPACITY);
        // 7. 等待当前线程池中线程任务完成才去关闭(必须设置)
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // 8. 采用juc中 ThreadPoolExecutor  直接丢弃
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        executor.initialize();
        return executor;
    }
}

@EnableAsync:开启异步

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/957432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号