androidBoomer
androidBoomer

Reputation: 3417

Sending Emails without Intents in Android

I'd like to send a message thru email without using intent. When I press the button, instead of "Email was sent successfully" is the toast message, it shows "Email was not sent" and it doesn't sending the email. Can someone help me regarding this matter?

MainActivity.java

@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("[email protected]", "password"); 

                            String[] toArr = {"[email protected]"};
            m.setTo(toArr);  
            m.setFrom("[email protected]"); 
            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); 
            } 
        }
    });
}

Mail.java

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("") && _pass.equals("") && _to.length > 0 && _from.equals("") && _subject.equals("") && _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 < _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; 
  }

Logcat

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)

Upvotes: 3

Views: 9582

Answers (1)

Related Questions