2010-06-11 3 views
3

SMTP У меня есть очень большой проект с тонной зависимостей, и я получаю следующее исключение при попытке отправить почту:Spring JavaMailSenderImpl javax.mail.NoSuchProviderException:

javax.mail.NoSuchProviderException: smtp 

Я знаю, что код работает, потому что является частью библиотеки, которая используется в других проектах. Кто-нибудь знает, что может вызвать это исключение? Я просмотрел все банки, и единственный, содержащий «javax.mail», - «mail-1.4.4-SNAPSHOT.jar».

Есть ли файл/класс, который регистрирует протокол «smtp», и это может происходить где-то еще в моем пути к классам?

ответ

2

Способ, которым я исправил это, заключается в удалении почтового ящика из пути к классам. Где-то в пути к классам существует еще один экземпляр mail.jar, и я еще не смог его найти. Если кто-то бежит в эту проблему, дополнительная информация о устранение неисправностей можно найти здесь:

http://forum.springsource.org/showthread.php?t=90737 и http://forums.sun.com/thread.jspa?threadID=5442371

2

Я имел этот вопрос. Помещение smtp.jar в classpath решило проблему.

+0

Добавление SMTP.jar решило эту проблему для меня только сейчас. – AgilePro

2

У меня такая же проблема, пока мы обновляем jboss от 4.x до 6.x.

Здесь Проблема задает путь к классу для большего количества файлов mail.jar (сервер по умолчанию возьмет файл mail.jar из его общего/lib-файла, если он там доступен). Чтобы подтвердить, какой файл jar используется, следующий оператор полезен.

System.out.println (getClass(). GetResource ("/ javax/mail/Address.class"));

, если он использует другой файл jar, который вы не ожидаете. Set classpath для этого, который вы используете. другой мудрый удалить этот файл jar из вышеуказанного напечатанного местоположения.

5

Это было время, так как этот вопрос был задан, но он по-прежнему стоит в ответ:

Что происходит, что почтовая служба использует SMTP (обычно, это даже считается в качестве протокола по умолчанию, чтобы использовать) протокол отправить почту. Независимо от того, какой конкретный класс вы используете в качестве почтового сервиса (может зависеть от того, работаете ли вы с Java EE, Spring или чем-то еще), он заканчивает использование классов из javamail API. В этом API, чтобы установить соединение с вашим почтовым сервером, будет создан экземпляр javax.mail.Session, и этот объект будет динамически загружать классы, которые обеспечивают поддержку используемого протокола.

При загрузке нужного класса в случае, если он не найден, исключение ClassNotFoundException улавливается и повторно бросается как javax.mail.NoSuchProviderException с сообщением об отсутствии поддержки протокола.

Решение в этом случае должно добавить smtp.jar в ваш путь к классам. С проектом в Maven основе, просто добавьте следующую зависимость

<dependency> 
     <groupId>com.sun.mail</groupId> 
     <artifactId>smtp</artifactId> 
     <version>1.4.5</version> 
    </dependency> 
1

Это также может произойти, когда у вас есть неправильная версия файла «mailapi.jar» в вашем пути к классам, а также.

Недавно я обновил проект, чтобы использовать API мыла PayPal, а в дистрибутиве PayPal содержится mailapi.jar, который отличается от того, который я имел в моем проекте, и вызвал мое приложение при отправке почты.

Так что для меня мне просто пришлось вернуться к моему старому mailapi.jar, и я был в порядке.

+1

Это было причиной той же проблемы для меня. Спасибо за указатель, проверили, что у меня была библиотека столько раз, прежде чем заметить, что теперь это PayPals. – Ashley

1

У меня было это isssue прямо сейчас. Проблема заключалась в двух javax.mail.jar в одном классе.

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