Spring JavaMailSenderImpl javax.mail.NoSuchProviderException: smtp - PullRequest
4 голосов
/ 11 июня 2010

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

javax.mail.NoSuchProviderException: smtp

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

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

Ответы [ 6 ]

6 голосов
/ 11 апреля 2012

Прошло много времени с тех пор, как этот вопрос был задан, но все же стоит ответить:

То, что происходит, заключается в том, что ваша почтовая служба использует SMTP-протокол (обычно это даже считается протоколом по умолчанию) для отправки почты. Независимо от того, какой конкретный класс вы используете в качестве почтового сервиса (может зависеть от того, работаете ли вы с Java EE, Spring или чем-то еще), он заканчивается использованием классов из API javamail. В этом 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>
3 голосов
/ 19 февраля 2012

У меня была эта проблема.Помещение smtp.jar в classpath решило проблему.

2 голосов
/ 06 апреля 2012

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

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

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

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

2 голосов
/ 21 июля 2010

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

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

1 голос
/ 12 августа 2012

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

1 голос
/ 26 июня 2012

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

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

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

...