title: java.lang.NoClassDefFoundError
body: <p>A <code>java.lang.NoClassDefError : com.example.androidphp.GmailSender</code> exception occurs while running on emulator while both classes are in the same package that is <code>com.example.androidphp</code></p>
  
  <pre><code>package com.example.androidphp;
  
  import android.support.v7.app.ActionBarActivity;
  
  import android.os.Bundle;
  
  import android.util.Log;
  
  import android.view.MenuItem;
  
  import android.view.View;
  
  import android.widget.Button;
  
  import android.widget.TextView;
  
  
  public class UserPage extends ActionBarActivity {
  
      Button button;
  
      TextView txtvw;
  
      String text;
  
      @Override
  
      protected void onCreate(Bundle savedInstanceState) {
  
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.userpage);
  
          txtvw = (TextView) findViewById(R.id.TextView01);
  
          button = (Button) findViewById(R.id.save);
  
          text = "";
  
          button.setOnClickListener(new View.OnClickListener() {
  
              @Override
  
              public void onClick(View v) {
  
                  try {
  
                      GmailSender sender = new GmailSender("abc@gmail.com", "password");
  
                      sender.sendMail("This is Subject",
  
                          "This is Body",
  
                          "abc@gmail.com",
  
                          "xyz@ymail.com");
  
                  } catch (Exception e) {
  
                      Log.e("SendMail", e.getMessage(), e);
  
                  }
  
              }
          });
  
      }
  
  
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
  
          int id = item.getItemId();
          if (id == R.id.action_settings) {
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  }
  
  
  GmailSender.java is
  
  
  
  package com.example.androidphp;
  
  import javax.activation.DataHandler;
  
  import javax.activation.DataSource;
  
  import javax.mail.Message;
  
  import javax.mail.PasswordAuthentication;
  
  import javax.mail.Session;
  
  import javax.mail.Transport;
  
  import javax.mail.internet.InternetAddress;
  
  import javax.mail.internet.MimeMessage;
  
  import java.io.ByteArrayInputStream;
  
  import java.io.IOException;
  
  import java.io.InputStream;
  
  import java.io.OutputStream;
  
  import java.security.Security;
  
  import java.util.Properties;
  
  public class GmailSender extends javax.mail.Authenticator {
  
      private String mailhost = "smtp.gmail.com";
  
      private String user;
  
      private String password;
  
      private Session session;
  
      static {
  
          Security.addProvider(new com.provider.JSSEProvider());
      }
  
      public GmailSender(String user, String password) {
  
          this.user = user;
  
          this.password = password;
  
          Properties props = new Properties();
  
          props.setProperty("mail.transport.protocol", "smtp");
  
          props.setProperty("mail.host", mailhost);
  
          props.put("mail.smtp.auth", "true");
  
          props.put("mail.smtp.port", "465");
  
          props.put("mail.smtp.socketFactory.port", "465");
  
          props.put("mail.smtp.socketFactory.class",
  
              "javax.net.ssl.SSLSocketFactory");
  
          props.put("mail.smtp.socketFactory.fallback", "false");
  
          props.setProperty("mail.smtp.quitwait", "false");
  
          session = Session.getDefaultInstance(props, this);
      }
  
      protected PasswordAuthentication getPasswordAuthentication() {
  
          return new PasswordAuthentication(user, password);
      }
  
      public synchronized void sendMail(String subject, String body, String sender, String recipients)
  
      throws Exception {
  
          try {
  
              MimeMessage message = new MimeMessage(session);
  
              DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(),
  
                  "text/plain"));
  
              message.setSender(new InternetAddress(sender));
  
              message.setSubject(subject);
  
              message.setDataHandler(handler);
  
              if (recipients.indexOf(',') &gt; 0)
  
              message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
  
              else message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
  
              Transport.send(message);
  
          } catch (Exception e) {
  
          }
  
      }
  
      public class ByteArrayDataSource implements DataSource {
  
          private byte[] data;
  
          private String type;
  
          public ByteArrayDataSource(byte[] data, String type) {
  
              super();
  
              this.data = data;
  
              this.type = type;
          }
  
          public ByteArrayDataSource(byte[] data) {
  
              super();
  
              this.data = data;
          }
  
          public void setType(String type) {
  
              this.type = type;
          }
  
          public String getContentType() {
  
              if (type == null)
  
              return "application/octet-stream";
  
              else return type;
          }
  
  
          public InputStream getInputStream() throws IOException {
  
              return new ByteArrayInputStream(data);
          }
  
          public String getName() {
  
              return "ByteArrayDataSource";
          }
  
          public OutputStream getOutputStream() throws IOException {
  
              throw new IOException("Not Supported");
  
          }
  
      }
  
  }
  
  
  
  and JSSEProvider
  
  
  
  
  
  package com.provider;
  
  import java.security.Provider;
  
  import java.security.AccessController;
  
  public class JSSEProvider extends Provider {
  
      /**
  
       * 
  
       */
      private static final long serialVersionUID = 1L;
  
      public JSSEProvider() {
  
          super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
  
          AccessController.doPrivileged(new java.security.PrivilegedAction &lt; Void &gt; () {
  
              public Void run() {
  
                  put("SSLContext.TLS",
  
                      "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
  
                  put("Alg.Alias.SSLContext.TLSv1", "TLS");
  
                  put("KeyManagerFactory.X509",
  
                      "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
  
                  put("TrustManagerFactory.X509",
  
                      "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
  
                  return null;
  
              }
  
          });
  
      }
  
  }
  </code></pre>
  
  <p>logcat is </p>
  
  <pre><code> FATAL EXCEPTION: main
  
    Process: com.example.androidphp, PID: 1992
  
   java.lang.NoClassDefFoundError: com.example.androidphp.GmailSender
  
  at com.example.androidphp.UserPage$1.onClick(UserPage.java:104)
  
  at android.view.View.performClick(View.java:4438)
  
  at android.view.View$PerformClick.run(View.java:18422)
  
  at android.os.Handler.handleCallback(Handler.java:733)
  
  at android.os.Handler.dispatchMessage(Handler.java:95)
  
  at android.os.Looper.loop(Looper.java:136)
  
  at android.app.ActivityThread.main(ActivityThread.java:5017)
  
  at java.lang.reflect.Method.invokeNative(Native Method)
  
  at java.lang.reflect.Method.invoke(Method.java:515)
  
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
  
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
  
  at dalvik.system.NativeStart.main(Native Method)
  </code></pre>