【问题标题】:NoSuchProviderException: smtp with log4j SMTP appenderNoSuchProviderException:带有 log4j SMTP 附加程序的 smtp
【发布时间】:2015-01-27 23:39:29
【问题描述】:

当出现异常时,我正在使用 log4j 发送电子邮件。下面是我的 log4j 属性文件配置。

log4j.rootLogger=WARN, R, email
log4j.appender.R=org.apache.log4j.ConsoleAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{HH:mm:ss} %-5p [%c{1}]: %m%n
log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.BufferSize=10
log4j.appender.email.SMTPHost=myhost.com
log4j.appender.email.From=abc@some.com
log4j.appender.email.To=abc@some.com
log4j.appender.email.Subject=Error
log4j.appender.email.layout=org.apache.log4j.PatternLayout

我的是 maven 项目,我添加了 mail.jar、activation.jar 和 smtp.jar 的依赖项。但在 应用程序服务器启动 本身我得到以下错误:

[ERROR] log4j:ERROR Error occured while sending e-mail notification.
[ERROR] javax.mail.NoSuchProviderException: smtp
[ERROR]     at javax.mail.Session.getService(Session.java:782)
[ERROR]     at javax.mail.Session.getTransport(Session.java:708)
[ERROR]     at javax.mail.Session.getTransport(Session.java:651)
[ERROR]     at javax.mail.Session.getTransport(Session.java:631)
[ERROR]     at javax.mail.Session.getTransport(Session.java:686)
[ERROR]     at javax.mail.Transport.send0(Transport.java:166)

我在这里有什么遗漏吗?错误的根本原因是什么?是因为SMTP 主机名不正确?还是因为任何缺少/冲突的依赖关系?

【问题讨论】:

标签: java log4j jms jakarta-mail slf4j


【解决方案1】:

您不需要 smtp.jar 和 mail.jar - smtp.jar 中的所有内容也在 mail.jar 中。摆脱 smtp.jar,虽然我怀疑这会解决你的问题。

另外,请确保您的类路径中没有任何其他带有 JavaMail 类的 jar 文件,例如 javaee.jar 或 j2ee.jar。

这很可能是某种类路径问题。 JavaMail 使用类加载器来查找配置提供程序的配置文件,例如“smtp”。如果类加载器不正确地处理资源查找,就会出现这个问题。

【讨论】:

    【解决方案2】:

    将您的 JavaMail 升级到 1.5.3,其中包含用于 Bug 6668 -skip unusable Store and Transport classesfix。来自错误报告:

    在复杂的类加载情况下,可能有 JavaMail 类的多个副本。定义的存储或运输 一个副本可能会被另一个副本加载,但它无法使用,因为 它们在不同的类加载器中。在这种情况下,JavaMail 应该跳过 覆盖不可用的类并尝试从另一个 ClassLoader 加载该类。

    例如,在 GlassFish 中,如果应用程序包含 JavaMail 类,应用程序类加载器配置为首选 应用程序类优于系统类,应用程序服务器本身尝试 在应用程序的上下文中运行时使用 JavaMail。

    您可以从JavaMail reference implementation 主页下载最新的快照和官方版本。

    【讨论】:

      【解决方案3】:

      您可能希望导出 smtp.jar 以供您的 web 应用使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 2021-08-30
        • 2017-05-11
        • 1970-01-01
        • 2018-03-19
        相关资源
        最近更新 更多