使用并行流发送电子邮件时获取NoSuchProviderException

时间:2019-01-09 11:25:53

标签: java multithreading java-8 javamail

我正在使用Java 8的并行流向用户列表发送电子邮件。这是我的代码-

AtomicInteger numberOfMailSent = new AtomicInteger(0);
listUsers.parallelStream().forEach(recipient -> {
    try {
        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
        if (EmailHelper.sendEmail(recipient.getEmailAddress()) == true) 
            numberOfMailSent.incrementAndGet();         
    } catch (Exception e1) {
        logger.error("An error in sending email due to - " + e1.getMessage());
}});    
System.out.println(numberOfMailSent);

在上面的代码中,sendEmail方法使用Java Mail API 1.4.0版(我没有源代码)。用户列表大约有20-40个用户,这取决于其他输入。对于列表中的某些用户,此代码将引发-

NoSuchProviderException: No provider for Address type: rfc822
javax.mail.NoSuchProviderException: No provider for Address type: rfc822
     at javax.mail.Session.getTransport(Session.java:475)
     at javax.mail.Transport.send0(Transport.java:154)
     at javax.mail.Transport.send(Transport.java:80)

但是,当我依次为每个循环使用相同的用户列表时,根本不会收到此错误,并且邮件运行正常。我尝试将Java邮件api版本更改为1.4.7,但没有成功。有人知道为什么会这样吗?谢谢!

0 个答案:

没有答案