title: Send Email Programmatically in Android
body: <p>So I am trying to send an email in Android without using Intent because I need it to be sent in the background. I am following <a href="http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_%28no_Intents%29_in_Android" rel="nofollow noreferrer">this post</a>,</p>
  
  <p>I have the .jars added as part of the build path.</p>
  
  <p>And I have this code as the class</p>
  
  <pre><code>package cistoran.partyPlanner;
  
  import java.util.Date; 
  import java.util.Properties; 
  import javax.activation.CommandMap; 
  import javax.activation.DataHandler; 
  import javax.activation.DataSource; 
  import javax.activation.FileDataSource; 
  import javax.activation.MailcapCommandMap; 
  import javax.mail.BodyPart; 
  import javax.mail.Multipart; 
  import javax.mail.PasswordAuthentication; 
  import javax.mail.Session; 
  import javax.mail.Transport; 
  import javax.mail.internet.InternetAddress; 
  import javax.mail.internet.MimeBodyPart; 
  import javax.mail.internet.MimeMessage; 
  import javax.mail.internet.MimeMultipart; 
  
  
  public class Mail extends javax.mail.Authenticator { 
    private String _user; 
    private String _pass; 
  
    private String[] _to; 
    private String _from; 
  
    private String _port; 
    private String _sport; 
  
    private String _host; 
  
    private String _subject; 
    private String _body; 
  
    private boolean _auth; 
  
    private boolean _debuggable; 
  
    private Multipart _multipart; 
  
  
    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; 
    } 
  
    // the getters and setters 
    public String getBody() { 
      return _body; 
    } 
  
    public void setBody(String _body) { 
      this._body = _body; 
    }
    public void setTo(String[] toArr) {
        this._to = toArr;
    }
  
    public void setFrom(String string) {
        this._from = string;
    }
  
    public void setSubject(String string) {
        this._subject = string;
    }
  
    // more of the getters and setters ….. 
  } 
  </code></pre>
  
  <p>And I have this code as my sendEmail method that is activated by clicking a button in the menu.</p>
  
  <pre><code>public void sendEmail()
  {
      EditText childNameBox = (EditText) findViewById(R.id.childNameBox);
      EditText parentNameBox = (EditText) findViewById(R.id.parentNameBox);
      EditText phoneNumberBox = (EditText) findViewById(R.id.phoneNumberBox);
      EditText ageBox = (EditText) findViewById(R.id.ageBox);
      EditText notesBox = (EditText) findViewById(R.id.notesBox);
      EditText colorsBox = (EditText) findViewById(R.id.colorsBox);
      EditText dateBox = (EditText) findViewById(R.id.dateBox);
      EditText timeBox = (EditText) findViewById(R.id.timeBox);
  
      childName = childNameBox.toString();
      parentName = parentNameBox.toString();
      childAge = ageBox.toString();
      phoneNumber = phoneNumberBox.toString();
      colorChoice = colorsBox.toString();
      notesText = notesBox.toString();
      dateDay = dateBox.toString();
      timeDay = timeBox.toString();
  
      emailCombined = childName + bN + parentName + bN + childAge + bN + phoneNumber + bN + colorChoice + bN + notesText + bN + dateDay + bN + timeDay;
      Mail m = new Mail("emailaddress", "password"); 
  
      String[] toArr = {"TOEMAIL@gmail.com.com", "FROMEMAIL@gmail.com"};
      m.setTo(toArr);
      m.setFrom("FROMEMAIL@gmail.com"); 
      m.setSubject("Party Booked"); 
      m.setBody(emailCombined); 
  
      try { 
        //m.addAttachment("/sdcard/filelocation"); 
  
        if(m.send()) { 
          Toast.makeText(PartyPlannerActivity.this, "Sent Email.", Toast.LENGTH_LONG).show(); 
        } else { 
          Toast.makeText(PartyPlannerActivity.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("PartyPlannerActivity", "Could not send email.", e); 
      } 
  }
  </code></pre>
  
  <p>And here is the LogCat I got from it</p>
  
  <pre><code>09-01 18:35:50.767: ERROR/PartyPlannerActivity(399): Could not send email.
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399): javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):   nested exception is:
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     java.net.SocketException: Permission denied
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at javax.mail.Service.connect(Service.java:310)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at javax.mail.Service.connect(Service.java:169)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at javax.mail.Service.connect(Service.java:118)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at javax.mail.Transport.send0(Transport.java:188)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at javax.mail.Transport.send(Transport.java:118)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at cistoran.partyPlanner.Mail.send(Mail.java:104)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at cistoran.partyPlanner.PartyPlannerActivity.sendEmail(PartyPlannerActivity.java:101)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at cistoran.partyPlanner.PartyPlannerActivity.onOptionsItemSelected(PartyPlannerActivity.java:62)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.app.Activity.onMenuItemSelected(Activity.java:2205)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:748)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.view.View$PerformClick.run(View.java:9080)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.os.Handler.handleCallback(Handler.java:587)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.os.Handler.dispatchMessage(Handler.java:92)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.os.Looper.loop(Looper.java:123)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at android.app.ActivityThread.main(ActivityThread.java:3683)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at java.lang.reflect.Method.invokeNative(Native Method)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at java.lang.reflect.Method.invoke(Method.java:507)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at dalvik.system.NativeStart.main(Native Method)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399): Caused by: java.net.SocketException: Permission denied
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at org.apache.harmony.luni.platform.OSNetworkSystem.socket(Native Method)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at dalvik.system.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at java.net.Socket.checkOpenAndCreate(Socket.java:802)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at java.net.Socket.connect(Socket.java:948)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at java.net.Socket.connect(Socket.java:926)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
  09-01 18:35:50.767: ERROR/PartyPlannerActivity(399):     ... 25 more
  </code></pre>
  
  <p>Any help would be greatly appreciated.</p>