title: Sending Email in Android using JavaMail API
body: <p>I have referred to previous answers to similar question of mine but it gives an example using the outgoing server configuration of Gmail.
  However I want to use the JavaMail API for the webmail that my company is using:</p>
  
  <p>Outgoing server: <strong>smtp.softcellindia.com</strong></p>
  
  <p>port: <strong>25</strong></p>
  
  <p>Type of encryption: <strong>none</strong></p>
  
  <p>I have tried using the following code. But it seems to send no mails.</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 MailSender extends javax.mail.Authenticator {   
      private String mailhost = "smtp.softcellindia.com";   
      private String user;   
      private String password;   
      private Session session;   
  
      static {   
          Security.addProvider(new com.provider.JSSEProvider());   
      }  
  
      public MailSender(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", "25");   
          props.put("mail.smtp.socketFactory.port", "25");   
          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");   
          }   
      }   
  } 
  </code></pre>