0

Je reçois une exception lorsque j'exécute ce code via la ligne de commande. Lorsque je l'exécute via l'IDE Eclipse, il fonctionne correctement, sans exception. Je n'arrive pas à comprendre ce qui se passe, mais c'est définitivement l'exception à l'énoncé de la session.NoClassDefFoundError ne se produit que lors de l'exécution du code via la ligne de commande

public static void sendEmail(String sendFile) { 
    // Send the log file via email. 
    final String username = "[email protected]"; 
    final String password = "myPassword"; 

    // Strings that contain from, to, subject, body and file path to the attachment. 
    String from = username; 
    String to = username; 
    String subject = "Baggage URL failures - Please check"; 
    String body = "FareDB Bad URL(s) Report. The following URL(s) could not be loaded..."; 
    String filename = sendFile; 
    System.out.println("Mail header info set!"); 

    // Set smtp properties 
    Properties properties = new Properties(); 
    properties.put("mail.smtp.starttls.enable", "true"); 
    properties.put("mail.smtp.auth", "true"); 
    properties.put("mail.smtp.host", "smtp.gmail.com"); 
    properties.put("mail.smtp.port", "587"); 
    System.out.println("SMTP properties set!"); 

    Session session = Session.getInstance(properties, null); 
    System.out.println("Mail session declared!"); 

    try { 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     // Just me for testing 
     message.setRecipient(Message.RecipientType.TO, new InternetAddress(username)); 
     message.setSubject(subject); 
     message.setSentDate(new Date()); 
     System.out.println("Mail body info set!"); 

     // Set the email body 
     MimeBodyPart messagePart = new MimeBodyPart(); 
     messagePart.setText(body); 
     System.out.println("Mime message body set!"); 

     // Set the email attachment file 
     MimeBodyPart attachmentPart = new MimeBodyPart(); 
     FileDataSource fileDataSource = new FileDataSource(filename) { 
      @Override 
      public String getContentType() { 
       return "application/octet-stream"; 
      } 
     }; 
     attachmentPart.setDataHandler(new DataHandler(fileDataSource)); 
     attachmentPart.setFileName(fileDataSource.getName()); 
     System.out.println("Mail attachment info set!"); 

     // Add all parts of the email to Multipart object 
     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(messagePart); 
     multipart.addBodyPart(attachmentPart); 
     message.setContent(multipart); 
     System.out.println("Mail parts added!"); 

     // Send email 
     Transport.send(message); 
     System.out.println("Mail sent!"); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
    } 
} 

L'erreur que je reçois est que quand il est exécuté à la ligne de commande:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger 
    at javax.mail.Session.initLogger(Session.java:221) 
    at javax.mail.Session.<init>(Session.java:206) 
    at javax.mail.Session.getInstance(Session.java:242) 
    at VerifyUrl.sendEmail(VerifyUrl.java:186) 
    at VerifyUrl.main(VerifyUrl.java:50) 
Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 5 more 

Toutes les idées ce qui pourrait être la cause?

+1

Copie possible de [Problème de messagerie Java avec Session.getInstance] (http://stackoverflow.com/questions/24807472/java-mail-issue-with-session-getinstance) –

+1

Copie possible de [java.lang.NoClassDefFoundError : com/dim/mail/util/MailLogger pour le cas de test JUnit pour le courrier Java] (http://stackoverflow.com/questions/16807758/java-lang-noclassdeffounderror-com-sun-mail-util-maillogger-for-junit -test-case) –

Répondre

0

Il s'agit du problème le plus courant rencontré par les développeurs Java.

  • Où java a un mécanisme de structure de paquet.
  • Pour exécuter un programme Java qui utilise d'autres classes/interfaces/enum, vous devez l'importer en classe.
  • Et si vous utilisez une bibliothèque externe ou d'autres packages, vous devez définir le chemin d'accès aux classes pour cette classe dans votre cas com.sun.mail.util.MailLogger.
  • où IDE comme eclipse et IntellijIdea emballent et définissent classpath pour vous.
  • Si vous essayez d'exécuter le programme ci-dessus ou tout autre programme, vous pouvez suivre la syntaxe comme

    java -cp /relative_path_to_your_dependency_jars ClassName

    Dans votre cas, quelque chose comme ça.

    java -cp /downloadpath/javax.mail-1.5.0.jar YouMainClass

    de même pour la compilation de la classe

    java -cp /downloadpath/javax.mail-1.5.0.jar YouMainClass.java

+0

C'est la chose, mon classpath est réglé correctement. Je vais devoir continuer à regarder ça. Cela n'a aucun sens. – Sulteric

+0

com.sun.mail.util.MailLogger fait partie de JavaMail API. Il est déjà inclus dans l'environnement EE (c'est pourquoi vous pouvez l'utiliser sur votre serveur live), mais il n'est pas inclus dans l'environnement SE. –

+0

Je suis un débutant à Java donc je ne comprends pas 1% de ce que vous dites. J'ai essayé tout ce que je peux comprendre sur les liens postés ci-dessus mais j'ai toujours le problème. Si quelqu'un pouvait mettre cela en anglais, je l'apprécierais. Et s'il vous plait, ne postez pas de contenu XML sans me dire dans quel fichier il est supposé aller et où il se trouve. Encore une fois, mon chemin de classe est bien. Cela fonctionne bien dans Eclipse. Tout ce que j'ai inclus dans Eclipse est dans mon classpath. J'ai éliminé le fichier javax-api jar et inclus le fichier javax.mail.jar à la place. Ça ne marche toujours pas. – Sulteric

0

Cela se est avéré être un problème de classpath et aussi à l'aide javax.mail au lieu de javax.mail-api.

Problème résolu maintenant.