700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 批量发送邮件_spring boot实现异步批量发送邮件

java 批量发送邮件_spring boot实现异步批量发送邮件

时间:2021-08-21 05:49:55

相关推荐

java 批量发送邮件_spring boot实现异步批量发送邮件

yml文件配置

spring:

mail:

host:

username: xing_a810@

password: ******##这里是你的授权码

default-encoding: UTF-8

protocol: smtp

properties.mail.smtp.auth: true

properties.mail.smtp.port: 994 #465或者994

properties.mail.display.sendmail: Javen

properties.mail.display.sendname: Spring Boot Guide Email

properties.mail.smtp.starttls.enable: true

properties.mail.smtp.starttls.required: true

properties.mail.smtp.ssl.enable: true

原本想直接写一个工具类的,但是突然发现JavaMailSender使用@Autowired引入的话会发生这个JavaMailSender为null的情况,按照/u/3774949/blog/3123304改正后发现如果是一个工具类接口必须是静态的,然后就改成实现类的写法

public interface xxxService {

void sendEmail(String text);

}

@Component

@Service

public class OrderEmailServiceImpl implements OrderEmailService {

@Autowired

private JavaMailSender javaMailSender;

@Async("taskExecutor")

@Override

public void sendEmail(String text) {

try{

// 异步执行

Thread.sleep(1000);

MimeMessage mimeMessage = javaMailSender.createMimeMessage();

MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);

String msg = "

尊敬的xxx,您好!

感谢信任xxxxxxxx!

您的xxxxxxx为:

" + text + "

";

try {

messageHelper.setSubject("xxxxxxxx");

messageHelper.setFrom("xing_a810@");//发送者的邮箱

messageHelper.setTo("xxxxx@");//发送给谁 可以是各种邮箱

messageHelper.setText(msg, true);//msg为发送的信息

javaMailSender.send(messageHelper.getMimeMessage());

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e){

e.printStackTrace();

}

}

}

写好发现这个邮件发送是很慢的,要等好久web页面才能收到成功的回调,然后就做成异步的,就弄了个线程池这样就算是批量发送邮件也不会有那样的卡顿 注意 加红的地方就是开启这个线程池的 还要在你的Application启动类上面加上开启异步的注解@EnableAsync

/**

* 定义异步任务执行线程池

*/

@Configuration

public class TaskPoolConfig {

@Bean("taskExecutor")

public Executor taskExecutor () {

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

// 核心线程数10:线程池创建时候初始化的线程数

executor.setCorePoolSize(10);

// 最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程

executor.setMaxPoolSize(15);

// 缓冲队列200:用来缓冲执行任务的队列

executor.setQueueCapacity(200);

// 允许线程的空闲时间60秒:当超过了核心线程数之外的线程在空闲时间到达之后会被销毁

executor.setKeepAliveSeconds(60);

// 线程池名的前缀:设置好了之后可以方便定位处理任务所在的线程池

executor.setThreadNamePrefix("taskExecutor-");

/*

线程池对拒绝任务的处理策略:这里采用了CallerRunsPolicy策略,

当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;

如果执行程序已关闭,则会丢弃该任务

*/

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

// 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean

executor.setWaitForTasksToCompleteOnShutdown(true);

// 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住。

executor.setAwaitTerminationSeconds(600);

return executor;

}

}

放两个参考链接 里面很详细,有发送附件的 发送文本的 发送 html 的 等等 我这个只是工作记录

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。