我正在使用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,但没有成功。有人知道为什么会这样吗?谢谢!