0
votes

I am trying to run a program to send mail using javamail.

it compiles successfully,but when i run it gives the below mentioned error.

Exception in thread "main" java.lang.NoClassDefFoundError: javamail1_4_5/SendEma il (wrong name: SendEmail)

questions

  1. Is there any settings required to run this program except copying mail.jar and activation.jar in classpath.i have copied those 2 files in C:\Program Files\Java\jdk1.7.0\jre\lib\ext and the .java file is in java\jdk1.7.0\bin folder.

2.Is there any server required to execute this program?

this is the code

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
   public static void main(String [] args)
   {    
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}
1

1 Answers

0
votes

java.lang.NoClassDefFoundError: javamail1_4_5/SendEmail (wrong name: SendEmail)

This basically means that you've placed the class file in a folder named javamail1_4_5 and that you were trying to run it as java javamail1_4_5.SendEmail. This class is expected to have a package declaration which matches the folder.

package javamail1_4_5;

However, the name SendEmail in the error message hints that there's no package at all. You have 2 options:

  1. Add that package declaration to top of the class (and recompile).
  2. cd into the javamail1_4_5 folder and execute it instead by java SendEmail.

Unrelated to the concrete problem, putting arbitrary JAR files not related to JRE itself in JRE's /lib or /lib/ext is a bad practice. It totally breaks portability. Use the -cp or -classpath argument or package it in a JAR. Use if necessary bat/cmd files save repeated commands. Putting source/class files in JRE's installation folder makes also no sense. You're not required to do so.