java 多线程发送邮件_javaMail利用线程池发送邮件

1.引入JavaMail

javax.mail

mail

${mail.version}

2.配置mailSender和线程池

${mail.customer.transport.protocol}

${mail.customer.mail.smtp.auth}

true

3.建实体类

public classMailEntry {privateString recipient;//可以是String[]数组,多个收件人privateString subject;privateString text;publicString getSubject() {returnsubject;

}public voidsetSubject(String subject) {this.subject =subject;

}publicString getText() {returntext;

}public voidsetText(String text) {this.text =text;

}publicString getRecipient() {returnrecipient;

}public voidsetRecipient(String recipient) {this.recipient =recipient;

}

4.发送邮件的业务层实现

public classMailSendUtil {public static Logger logger = LoggerFactory.getLogger(MailSendUtil.class);private static final String[] configLocations = {"config/applicationContext-mail.xml"};public static ApplicationContext ctx = newClassPathXmlApplicationContext(configLocations);public TaskExecutor taskExecutor = (ThreadPoolTaskExecutor) ctx.getBean("taskExecutor");public JavaMailSender javaMailSender = (JavaMailSender) ctx.getBean("cusMailSender");public voidsendMailToCus(MailEntry mailEntry) {

MimeMessage message=javaMailSender.createMimeMessage();try{//设置回执//message.addHeader("Disposition-Notification-To", "1");

MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");

helper.setFrom(ActionMessage.getStaMessage("mail.customer.senderAddress"));

helper.setSubject(mailEntry.getSubject());//设置为TRUE则可以使用Html标记

helper.setText(mailEntry.getText(), true);

helper.setTo(mailEntry.getRecipient());

addSendMailTask(mailEntry.getRecipient(), message);

}catch(MessagingException e) {

logger.error("邮件转换异常,邮件详细信息为", e.getMessage());

}

}/***@paramemail 邮箱地址

*@parammessage MimeMessage邮件封装类

* @desc 使用多线程发送邮件*/

private void addSendMailTask(final String email, finalMimeMessage message) {try{

taskExecutor.execute(newRunnable() {

@Overridepublic voidrun() {

javaMailSender.send(message);long threadId =Thread.currentThread().getId();

logger.info("线程ID:"+threadId+"发送邮件:" +email);

}

});

}catch(Exception e) {

logger.error(email+ "邮件发送异常,邮件详细信息为", e.getMessage());

}

}

}

线程池中线程数量达到最大允许的线程数量,然后所有线程都同时进入空闲状态且空闲时间超过keepAliveTime,停止多余的线程并保留核心数量的线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值