J'utilise l'API Java Mail pour lire et analyser les e-mails. Cela fonctionne bien avec le code Servlet.
J'essaye maintenant d'écrire un cas de test JUnit dans le même but. Mais en ligne Session session = Session.getDefaultInstance(properties);
, j'obtiens l'exception suivante:
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
at javax.mail.Session.initLogger(Session.java:227)
at javax.mail.Session.<init>(Session.java:212)
at javax.mail.Session.getDefaultInstance(Session.java:315)
at javax.mail.Session.getDefaultInstance(Session.java:355)
at com.vxl.appanalytix.dataload.fromEmail.EmailParser.parseEmailSubject(EmailParser.java:44)
at com.vxl.appanalytix.controllers.controllerClasses.GenericEmailServiceClass.readEmailAttachments(GenericEmailServiceClass.java:33)
at com.vxl.appanalytix.dataload.GenericEmailTestCase.test(GenericEmailTestCase.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 35 more
Quelqu'un peut-il me dire où je vais mal.
<groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId>
.L'
javax.mail-api
artefact n'est bon que pour la compilation .Vous devez en fait exécuter du code, vous avez donc besoin d'une implémentation complète de l'API JavaMail. Utilisez ceci:
REMARQUE: le numéro de version sera probablement différent. Vérifiez la dernière version ici .
la source
java.lang.NoClassDefFoundError: com/sun/mail/util/PropUtil
ainsi que lesCould not initialize class javax.mail.internet.InternetAddress
erreurs.J'utilise les dépendances maven suivantes pour faire fonctionner le courrier java. Le premier comprend l'API javax.mail (sans implémentation) et le second est l'implémentation SUN de l'API javax.mail.
la source
Téléchargez ce JAR et ajoutez-le à vos bibliothèques: http://java.net/projects/javamail/downloads/download/javax.mail.jar
la source
Veuillez consulter http://mvnrepository.com/artifact/javax.mail/mail/ , vous pouvez télécharger jar ou utiliser la dépendance maven, en fonction de votre type de projet. Cela devrait à peu près le couvrir et vous n'obtiendrez pas d'exception NoClassDefFoundError.
la source
C'est vraiment intéressant. Il vous suffit d'utiliser javax-mail.jar de "com.sun" et non de "javax.mail".
jar mail dwonload com.sun
la source
Cela se produit également si votre code attend Java Mail 1.4 et vos jars sont Java Mail 1.3. Cela m'est arrivé lors de la mise à niveau de la bouilloire Pentaho
Cordialement
la source