首页 > 解决方案 > 使用并行流发送电子邮件时出现 NoSuchProviderException

问题描述

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

标签: javamultithreadingjava-8jakarta-mail

解决方案


推荐阅读