异步发送邮件

在Spring Boot]项目中开启异步多线程非常简单,只需要下面几个步骤即可。
一、首先在启动类上面加@EnableAsync注解
二、在配置文件中加入以下配置信息

 spring:
     mail:
        default-encoding: UTF-8
        host: smtp.163.com
        username: *********@163.com
        password: 此处是密码

如果说是系统内部邮件,可以加入以下灵活配置

工程名:
    email:
        system:*****@163.com
        leader:******@qq.com

三、加入线程的配置代码

@Configuration
public class ThreadPoolConfig {

    @Bean("AsyncTaskExecutor")
    public AsyncTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //设置核心线程数
        executor.setCorePoolSize(5);
        //设置最大线程数
        executor.setMaxPoolSize(10);
        //设置队列容量
        executor.setQueueCapacity(100);
        //设置线程活跃时间---秒
        executor.setKeepAliveSeconds(60);
        //设置默认线程名称
        executor.setThreadNamePrefix("task-");
        //设置拒绝策略
        //此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        executor.initialize();
        return executor;
    }
}

四、创建邮件任务类,定义线程任务

@Component
@Scope("prototype")
public class EmailTask implements Serializable {

    @Autowired
    private JavaMailSender mailSender;

    //在配置文件中配置的信息
    @Value("${emos.email.system}")
    private String systemEmail;

    //异步执行注解
    @Async
    public void sendAsync(SimpleMailMessage message) {
        // 设置发件人
        message.setFrom(systemEmail);
        mailSender.send(message);
    }
}

五、编写业务代码

@Autowired
private EmailTask emailTask;


public void testEmail(){
        String name = "张三";
        String deptName = "程序员";
        String address="商丘市";
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo("admin@163.com");
        message.setText(deptName+"员工"+name+","+DateUtil.format(new Date(), "yyyy年MM月dd日") + "处于" + address + ",属于新冠疫情高风险地区,请及时与该员工联系,核实情况!");
        emailTask.sendAsync(message);
    }

六、最后自己测试即可

### Python中异步发送邮件的作用及优势 在现代高并发、实时响应的应用开发中,异步处理已经成为提升系统效率的关键[^1]。Python中的异步发送邮件技术正是在这种需求背景下应运而生。其作用和优势主要体现在以下几个方面: #### 1. 提升系统性能 传统的同步发送邮件方式会阻塞主线程,直到邮件发送完成才继续执行后续代码。这种方式在高并发场景下会导致服务器资源浪费,降低系统的吞吐量。而异步发送邮件可以将邮件发送任务从主线程中分离出来,在不阻塞主线程的情况下完成邮件发送操作[^2]。 #### 2. 改善用户体验 对于需要频繁发送邮件的应用(如注册验证、密码重置等),如果采用同步方式发送邮件,用户可能需要等待较长时间才能看到页面响应。而异步发送邮件可以在用户提交请求后立即返回响应,并在后台完成邮件发送任务,从而显著改善用户体验[^3]。 #### 3. 高效处理批量任务 在某些应用场景中,可能需要一次性发送大量邮件(如营销活动通知)。这种情况下,同步发送邮件会导致程序长时间占用资源,甚至可能出现超时错误。而异步发送邮件可以通过消息队列等方式将任务分解为多个子任务并行处理,从而提高批量任务的处理效率[^4]。 #### 4. 更好的错误处理机制 异步发送邮件通常与消息队列或任务调度系统结合使用。这种架构设计使得邮件发送失败时能够更容易地进行重试或记录日志,而不会影响主线程的正常运行[^1]。 ### 应用场景 #### 1. 用户注册与登录 当用户完成注册或忘记密码时,系统需要向用户发送一封包含验证码或重置链接的邮件。这类场景通常要求快速响应用户请求,因此非常适合采用异步发送邮件的方式。 #### 2. 定时通知 例如每日/每周的报表推送、订单状态更新提醒等。这些任务通常具有定时性和批量性,通过异步发送邮件可以更好地利用系统资源。 #### 3. 营销活动推广 在企业开展促销活动或新产品发布时,可能需要向大量用户发送推广邮件。这种场景对系统的并发处理能力和稳定性提出了较高要求,异步发送邮件是理想的选择。 #### 4. 系统监控与报警 当系统检测到异常情况(如服务器宕机、磁盘空间不足等)时,可以通过异步发送邮件的方式及时通知管理员,确保问题能够得到快速解决。 ```python import asyncio from aiosmtplib import SMTP async def send_email_async(to_email, subject, message): smtp_server = "smtp.example.com" smtp_port = 587 smtp_username = "[email protected]" smtp_password = "password" async with SMTP(hostname=smtp_server, port=smtp_port) as smtp: await smtp.starttls() await smtp.login(smtp_username, smtp_password) await smtp.sendmail(smtp_username, [to_email], f"Subject: {subject}\n\n{message}") # 示例调用 asyncio.run(send_email_async("[email protected]", "Test Subject", "This is a test email.")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值