title: How do you send mail in Android using JavaMail API?
body: <p>How do you send mail from Android? The same code is working fine in a Java project but not in Android.</p>
  
  <p>1) GmailSender.java</p>
  
  <pre><code>       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.idocz.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 {
         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);
         }
  
         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");
         }
         }
         }
  </code></pre>
  
  <p>2) JSSEProvider.java</p>
  
  <pre><code>        import java.security.AccessController;
          import java.security.Provider;
  
          public final 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;
              }
          });
      }
  }
  
       GMailSender sender = new GMailSender("xxx@gmail.com", "xxxxxx");
       sender.sendMail("Test", "Test mail",  "xxx@gmail.com", "xxx@gmail.com");     
  </code></pre>
  
  <p>GMailSender class call in activity class but I got error.</p>
  
  <pre><code>     05-07 19:59:42.729: E/dalvikvm(9567): Could not find class 'com.test.GMailSender', referenced from method com.test.sendmail$2.onClick
  
       05-07 19:59:43.739: E/AndroidRuntime(9567): FATAL EXCEPTION: main
  
      05-07 19:59:43.739: E/AndroidRuntime(9567): java.lang.NoClassDefFoundError: com.test.GMailSender
  </code></pre>