2010-06-11 11 views
3

J'ai un très grand projet avec une tonne de dépendances, et me fais l'exception suivante lorsque vous essayez d'envoyer du courrier:Spring JavaMailSenderImpl javax.mail.NoSuchProviderException: smtp

javax.mail.NoSuchProviderException: smtp 

Je sais que le code fonctionne parce qu'il fait partie d'une bibliothèque qui est utilisée dans d'autres projets. Est-ce que quelqu'un sait ce qui pourrait provoquer cette exception? J'ai regardé à travers tous les jars et le seul contenant 'javax.mail' est 'mail-1.4.4-SNAPSHOT.jar'.

Y a-t-il un fichier/classe qui enregistre le protocole 'smtp', et cela pourrait se produire ailleurs dans mon classpath?

Répondre

2

J'ai eu cette question. Mettre smtp.jar dans classpath a résolu le problème.

+0

L'ajout de SMTP.jar a résolu ce problème pour moi maintenant. – AgilePro

2

J'ai le même problème pendant la mise à jour de jboss de 4.x à 6.x.

Ici Problème est la définition de classpath au plus grand nombre de fichiers mail.jar (le serveur par défaut enlèvera le fichier mail.jar de son foler commun/lib s'il y est disponible). Pour confirmer le fichier jar utilisé, l'instruction suivante est utile. System.out.println (getClass(). GetResource ("/ javax/mail/Address.class"))

Si vous utilisez un autre fichier jar auquel vous ne vous attendiez pas ... définissez le chemin de classe à celui que vous utilisez. Sinon, retirez ce fichier jar de l'emplacement imprimé ci-dessus.

5

Il a été un moment que cette question a été posée, mais il est toujours utile de répondre:

Ce qui se passe est que votre service de messagerie utilise le protocole SMTP (généralement, il est même considéré comme le protocole par défaut à utiliser) envoyer un mail Quelle que soit la classe concrète que vous utilisez en tant que service de messagerie (que vous travailliez avec Java EE, Spring ou autre), elle finit par utiliser des classes de l'API javamail. Dans cette API, afin d'établir une connexion à votre serveur de messagerie, une instance de javax.mail.Session sera créée et cet objet chargera dynamiquement les classes qui fournissent le support pour le protocole à utiliser.

Lors du chargement de la classe requise, si elle n'est pas trouvée, ClassNotFoundException est interceptée et renvoyée sous la forme javax.mail.NoSuchProviderException, avec un message indiquant la prise en charge du protocole manquant.

La solution dans ce cas consiste à ajouter le fichier smtp.jar à votre classpath. Avec un projet basé sur Maven, il suffit d'ajouter la dépendance suivante

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

Cela peut également se produire lorsque vous avez une version incorrecte du fichier « mailapi.jar » dans votre classpath.

J'avais récemment mis à jour un projet pour utiliser l'API soap de PayPal, et la distribution de PayPal contenait un mailapi.fichier jar, qui était différent de celui que j'avais actuellement dans mon projet, et a fait échouer mon application lors de l'envoi de courrier.

Donc pour moi, je devais juste revenir à mon ancien mailapi.jar et ça allait.

+1

Cela a été la cause du même problème pour moi. Merci pour le pointeur, vérifié j'ai eu la bibliothèque tant de fois avant de remarquer qu'il était maintenant PayPals. – Ashley

1

J'ai eu cette isssue en ce moment. Le problème était deux javax.mail.jar dans le même classpath.