2012-06-11 4 views
1

Я использую log4j для отправки электронной почты при возникновении исключения. ниже приведена конфигурация файла свойств log4j.NoSuchProviderException: smtp с log4j SMTP appender

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 
[email protected] 
[email protected] 
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? или это из-за каких-либо отсутствующих/конфликтных зависимостей?

+0

См. [Этот ответ] (http://stackoverflow.com/a/15637471/772981) об одном и том же сообщении об ошибке. – Jarekczek

ответ

1

Вам не нужны smtp.jar и mail.jar - все в smtp.jar также находится в mail.jar. Избавьтесь от smtp.jar, хотя я сомневаюсь, что решит вашу проблему.

Кроме того, убедитесь, что у вас нет других файлов jar с классами JavaMail в вашем пути к классам, например javaee.jar или j2ee.jar.

Это скорее всего проблема класса. JavaMail использует загрузчик классов для поиска файла конфигурации, который настраивает поставщиков, таких как «smtp». Если загрузчик классов неправильно обрабатывает поиск ресурсов, эта проблема может возникнуть.

0

Возможно, вы захотите экспортировать smtp.jar для использования в вашем webapp.

1

Обновите свой JavaMail до 1.5.3, который содержит fix для Bug 6668 -skip unusable Store and Transport classes. Из отчета об ошибке:

In complex class loading situations, it can be possible for there to be multiple copies of the JavaMail classes. A Store or Transport defined by one copy may be loaded by another copy, but it won't be usable because they're in different ClassLoaders. In this case, JavaMail should skip over the unusable class and try to load the class from another ClassLoader.

This can happen, for example, in GlassFish if the application includes the JavaMail classes, the application class loader is configured to prefer application classes over system classes, and the app server itself tries to use JavaMail when running in the context of the application.

Вы можете скачать последний снимок и официальные релизы от JavaMail reference implementation домашней страницы.

Смежные вопросы