title: Sending Emails without Intents in Android
body: <p>I'd like to send a message thru email without using intent. When I press the button, instead of <strong>"<em>Email was sent successfully</em>"</strong> is the toast message, it shows "<em>Email was not sent</em>" and it doesn't sending the email. Can someone help me regarding this matter?</p>
  
  <p><strong>MainActivity.java</strong></p>
  
  <pre><code>@SuppressLint("SdCardPath")
  public class MainActivity extends Activity {
  
  
      @Override
      protected void onCreate(Bundle icicle) {
      super.onCreate(icicle);
      setContentView(R.layout.activity_main);
  
      Button addImage = (Button) findViewById(R.id.send_email); 
      addImage.setOnClickListener(new View.OnClickListener() { 
          public void onClick(View view) {            
  
              Mail m = new Mail("gmailusername@gmail.com", "password"); 
  
                              String[] toArr = {"lp.mar@gmail.com"};
              m.setTo(toArr);  
              m.setFrom("p.mar@gmail.com"); 
              m.setSubject("Email Test"); 
              m.setBody("This is an email sent using my Mail JavaMail wrapper from an Android device."); 
  
              try { 
              m.addAttachment("/sdcard/filelocation"); 
  
                  if(m.send()) { 
                      Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show(); 
                  } else { 
                      Toast.makeText(MainActivity.this, "Email was not sent.", Toast.LENGTH_LONG).show(); 
                  } 
              } catch(Exception e) { 
                  //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
                  Log.e("MailApp", "Could not send email", e); 
              } 
          }
      });
  }
  </code></pre>
  
  <p><strong>Mail.java</strong></p>
  
  <pre><code>public Mail() { 
      _host = "smtp.gmail.com"; // default smtp server 
      _port = "465"; // default smtp port 
      _sport = "465"; // default socketfactory port 
  
      _user = ""; // username 
      _pass = ""; // password 
      _from = ""; // email sent from 
      _subject = ""; // email subject 
      _body = ""; // email body 
  
      _debuggable = false; // debug mode on or off - default off 
      _auth = true; // smtp authentication - default on 
  
      _multipart = new MimeMultipart(); 
  
      // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
      MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
         mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
         mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
         mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
         mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
         mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
      CommandMap.setDefaultCommandMap(mc); 
    } 
  
    public Mail(String user, String pass) { 
      this(); 
  
      _user = user; 
      _pass = pass; 
    } 
  
    public boolean send() throws Exception { 
      Properties props = _setProperties(); 
  
      if(_user.equals("") &amp;&amp; _pass.equals("") &amp;&amp; _to.length &gt; 0 &amp;&amp; _from.equals("") &amp;&amp; _subject.equals("") &amp;&amp; _body.equals("")) { 
        Session session = Session.getInstance(props, this); 
  
        MimeMessage msg = new MimeMessage(session); 
  
        msg.setFrom(new InternetAddress(_from)); 
  
        InternetAddress[] addressTo = new InternetAddress[_to.length]; 
        for (int i = 0; i &lt; _to.length; i++) { 
          addressTo[i] = new InternetAddress(_to[i]); 
        } 
          msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 
  
        msg.setSubject(_subject); 
        msg.setSentDate(new Date()); 
  
        // setup message body 
        BodyPart messageBodyPart = new MimeBodyPart(); 
        messageBodyPart.setText(_body); 
        _multipart.addBodyPart(messageBodyPart); 
  
        // Put parts in message 
        msg.setContent(_multipart); 
  
        // send email 
        Transport.send(msg); 
  
        return true; 
      } else { 
        return false; 
      } 
    } 
  
    public void addAttachment(String filename) throws Exception { 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      DataSource source = new FileDataSource(filename); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName(filename); 
  
      _multipart.addBodyPart(messageBodyPart); 
    } 
  
    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(_user, _pass); 
    } 
  
    private Properties _setProperties() { 
      Properties props = new Properties(); 
  
      props.put("mail.smtp.host", _host); 
  
      if(_debuggable) { 
        props.put("mail.debug", "true"); 
      } 
  
      if(_auth) { 
        props.put("mail.smtp.auth", "true"); 
      } 
  
      props.put("mail.smtp.port", _port); 
      props.put("mail.smtp.socketFactory.port", _sport); 
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props.put("mail.smtp.socketFactory.fallback", "false"); 
  
      return props; 
    }
  </code></pre>
  
  <p><strong>Logcat</strong></p>
  
  <pre><code>06-20 17:01:16.889: E/MailApp(7081): Could not send email
  06-20 17:01:16.889: E/MailApp(7081): java.lang.NullPointerException
  06-20 17:01:16.889: E/MailApp(7081):    at java.util.Hashtable.put(Hashtable.java:365)
  06-20 17:01:16.889: E/MailApp(7081):    at com.example.emailtest.Mail._setProperties(Mail.java:117)
  06-20 17:01:16.889: E/MailApp(7081):    at com.example.emailtest.Mail.send(Mail.java:72)
  06-20 17:01:16.889: E/MailApp(7081):    at com.example.emailtest.MainActivity$1.onClick(MainActivity.java:36)
  06-20 17:01:16.889: E/MailApp(7081):    at android.view.View.performClick(View.java:3558)
  06-20 17:01:16.889: E/MailApp(7081):    at android.view.View$PerformClick.run(View.java:14157)
  06-20 17:01:16.889: E/MailApp(7081):    at android.os.Handler.handleCallback(Handler.java:605)
  06-20 17:01:16.889: E/MailApp(7081):    at android.os.Handler.dispatchMessage(Handler.java:92)
  06-20 17:01:16.889: E/MailApp(7081):    at android.os.Looper.loop(Looper.java:137)
  06-20 17:01:16.889: E/MailApp(7081):    at android.app.ActivityThread.main(ActivityThread.java:4514)
  06-20 17:01:16.889: E/MailApp(7081):    at java.lang.reflect.Method.invokeNative(Native Method)
  06-20 17:01:16.889: E/MailApp(7081):    at java.lang.reflect.Method.invoke(Method.java:511)
  06-20 17:01:16.889: E/MailApp(7081):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
  06-20 17:01:16.889: E/MailApp(7081):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
  06-20 17:01:16.889: E/MailApp(7081):    at dalvik.system.NativeStart.main(Native Method)
  </code></pre>