java实现发送邮件

本文介绍下java实现邮件的发送,意在网站用户评论时能够及时通知站长和用户评论被回复后能够及时通知用户。

下文介绍下具体实现。

java实现

首先引入springboot的邮箱依赖

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

配置邮箱参数,这里以qq邮箱作为示例

spring:
    mail:
        host: smtp.qq.com #qq邮箱
        username:             #用户名,填qq邮箱地址。例如xxx@qq.com
        password:             #qq邮箱授权码,网上搜索怎么获得

此时就差不多了,接下来实现邮箱工具类

@Component
public class MailUtil {
    @Value("${spring.mail.username}")
    private String from; //这是发送人
    @Autowired
    JavaMailSender javaMailSender;
    public ResponseDto sendMail(String to,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
        return ResponseDto.Ok();
    }
}

此时调用MailUtil里的sendMail方法就能实现发送邮件了。

实践中发现每次都需要等待邮件发送成功后接口才会返回,不符合我们的实际需求。故需在发送邮件时开辟一个新线程,即可满足我们的需求。

为了减少大规模请求下创建线程的开销,引入线程池来处理发送邮件事件。

线程池

使用**@Configuration注解保证初始化线程池只有一次,使用@Bean注解在程序启动时就注入到IOC容器**内,这样可以保证程序启动后就会初始化线程池。

@Configuration
@Slf4j
public class ThreadPool {
    private Integer maxPoolSize = Runtime.getRuntime().availableProcessors()*5;
    private Integer corePoolSize = 5;

    @Bean
    public ExecutorService buildThreadPool() {
        log.info("开始创建线程池");
        ExecutorService pool = new ThreadPoolExecutor(corePoolSize, maxPoolSize, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(100));
        return pool;
    }
}

ThreadPoolExecutor感兴趣的可以自己看,在此不过多介绍。

现在就可以使用线程来发送邮件了。

threadPool.buildThreadPool().submit(new Runnable() {
    @Override
    public void run() {
        String to,subject = null;
        if(comment.getParentId() == -1){
        	to = mail;
        	subject = "有人在你的博客评论了";
        } else{
       		to = commentService.getById(comment.getParentId()).getUserEmail();
        	subject = "有人回复了你的评论";
        }
        mailUtil.sendMail(to,subject,"有人回复了你的评论,点击链接跳转到评论回复页面,https://xiaoliu.life/p/"+comment.getBlogId());
    }
});

最后实现效果:

原文链接:https://xiaoliu.life/p/20230516a

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值