How to retrieve the Gmail Inbox using Android
<p>I am new to <code>android</code> Programming and I want to retrieve <code>Gmail</code> Inbox.
    After browsing through many pages i got some idea about how to retrieve it, 
    while compiling there is no error but at the time of executing through Emulator,
     suddenly the application is closed saying. Unfortunately "App_name" has 
    stopped.</p>

<p>I am pasting my code over here pls let me know whats the problem.</p>

<p>inbox.java where i want to get my inbox.</p>

<pre><code>import javax.mail.MessagingException;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

public class Inbox extends Activity {

    EmailManager emailManager;
    private String stmpHost = "smtp.gmail.com";
    private String mailServer = "imap.gmail.com";    
    public String urlServer = "gmail.com";
    public String username = "your username";
    public String password = "your password";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inbox);

        emailManager=new EmailManager(username, password, urlServer, stmpHost, mailServer);
        try {
            emailManager.getInboxMails();           
            emailManager.close();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Intent intent = getIntent();
        String message = intent.getStringExtra(DatabaseConnector.EXTRA_MESSAGE);
        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        // Set the text view as the activity layout
        setContentView(textView);
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_inbox, menu);
        return true;
    }

}




import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
//import javax.mail.Transport;
//import javax.mail.internet.InternetAddress;
//import javax.mail.internet.MimeMessage;
//
//import android.location.Address;
import android.util.Log;
//import android.widget.Toast;




public class EmailManager {
    private String stmpHost = "smtp.gmail.com";
    private String mailServer = "imap.gmail.com";
    private EmailAccount account;
    private Session smtpSession; 
    private Session imapSession; 

    private Folder inbox,sentMail;
    private Store store,sentstore;
      boolean isSet;
    public EmailManager(String username, String password, String urlServer, String stmpHost, String mailServer) {
        account = new EmailAccount(username, password, urlServer);
        this.stmpHost = stmpHost;
        this.mailServer = mailServer;
        initProtocol();
    }


    private void initProtocol() {
        EmailAuthenticator authenticator = new EmailAuthenticator(account);     
        Properties props1 = new Properties();  
        props1.setProperty("mail.transport.protocol", "smtps");  
        props1.setProperty("mail.host", stmpHost);  
        props1.put("mail.smtp.auth", "true");  
        props1.put("mail.smtp.port", "465");  
        props1.put("mail.smtp.socketFactory.port", "465");  
        props1.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
        props1.put("mail.smtp.socketFactory.fallback", "false");  
        props1.setProperty("mail.smtp.quitwait", "false");  
        smtpSession = Session.getDefaultInstance(props1, authenticator); 

        Properties props2 = new Properties();
        props2.setProperty("mail.store.protocol", "imaps");
        props2.setProperty("mail.imaps.host", mailServer);
        props2.setProperty("mail.imaps.port", "993");
        props2.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props2.setProperty("mail.imaps.socketFactory.fallback", "false");
        imapSession = Session.getInstance(props2);
    }   

    public void getInboxMails() throws MessagingException {
        store = imapSession.getStore("imaps");
        store.connect(mailServer, account.username, account.password);
        inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        Message[] messages = inbox.getMessages();
//      List&lt;Address&gt;addresses=new ArrayList&lt;Address&gt;();

        for (int i = messages.length - 1; i &gt;= 0; i--) 
        {

             Part p = messages[i]; 
            try {
                String subject = messages[i].getSubject();
                Log.v("subject","subject="+subject);
                String body=getText(p);
                Log.v("body","body="+body);
                javax.mail.Address[] address=messages[i].getFrom();
                String add=address.toString().trim();
                Log.v("address","address="+add);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return ;
    }

    private boolean textIsHtml = false;

    /**
     * Return the primary text content of the message.
     */
    private String getText(Part p) throws
                MessagingException, IOException {
        if (p.isMimeType("text/*")) {
            String s = (String)p.getContent();
            textIsHtml = p.isMimeType("text/html");
            return s;
        }

        if (p.isMimeType("multipart/alternative")) {
            // prefer html text over plain text
            Multipart mp = (Multipart)p.getContent();
            String text = null;
            for (int i = 0; i &lt; mp.getCount(); i++) {
                Part bp = mp.getBodyPart(i);
                if (bp.isMimeType("text/plain")) {
                    if (text == null)
                        text = getText(bp);
                    continue;
                } else if (bp.isMimeType("text/html")) {
                    String s = getText(bp);
                    if (s != null)
                        return s;
                } else {
                    return getText(bp);
                }
            }
            return text;
        } else if (p.isMimeType("multipart/*")) {
            Multipart mp = (Multipart)p.getContent();
            for (int i = 0; i &lt; mp.getCount(); i++) {
                String s = getText(mp.getBodyPart(i));
                if (s != null)
                    return s;
            }
        }

        return null;
    }


    public void close() {
        //Close connection 
        try {
//          inbox.close(false);
//          store.close();
            sentMail.close(false);
            sentstore.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }


}


package com.example.lomenttech;


import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


public class EmailAuthenticator extends Authenticator   {
    private EmailAccount account;
    public EmailAuthenticator(EmailAccount account) {
        super();
        this.account = account;
    }
    protected PasswordAuthentication getPasswordAuthentication() {  
        return new PasswordAuthentication(account.emailAddress, account.password);  
    } 
}



package com.example.lomenttech;


public class EmailAccount {
    public String urlServer = "gmail.com";
    public String username = "meenashah.np";
    public String password = "your password";
    public String emailAddress;
    public EmailAccount(String username, String password, String urlServer) {
        this.username = username;
        this.password = password;
        this.urlServer = urlServer;
        this.emailAddress = username + "@" + urlServer;
    }

}

package com.example.lomenttech;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

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");   
    }
    @Override
    public PrintWriter getLogWriter() throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public int getLoginTimeout() throws SQLException {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public void setLogWriter(PrintWriter arg0) throws SQLException {
        // TODO Auto-generated method stub

    }
    @Override
    public void setLoginTimeout(int arg0) throws SQLException {
        // TODO Auto-generated method stub

    }
    @Override
    public boolean isWrapperFor(Class&lt;?&gt; arg0) throws SQLException {
        // TODO Auto-generated method stub
        return false;
    }
    @Override
    public &lt;T&gt; T unwrap(Class&lt;T&gt; arg0) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public Connection getConnection() throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public Connection getConnection(String arg0, String arg1)
            throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }   
} 



These are the logcat errors:

01-22 19:54:23.027: E/AndroidRuntime(849): FATAL EXCEPTION: main
01-22 19:54:23.027: E/AndroidRuntime(849): java.lang.NoClassDefFoundError: javax.mail.Session
01-22 19:54:23.027: E/AndroidRuntime(849):  at com.example.lomenttech.EmailManager.getInboxMails(EmailManager.java:73)
01-22 19:54:23.027: E/AndroidRuntime(849):  at com.example.lomenttech.Inbox.onCreate(Inbox.java:37)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.Activity.performCreate(Activity.java:5104)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.os.Looper.loop(Looper.java:137)
01-22 19:54:23.027: E/AndroidRuntime(849):  at android.app.ActivityThread.main(ActivityThread.java:5039)
01-22 19:54:23.027: E/AndroidRuntime(849):  at java.lang.reflect.Method.invokeNative(Native Method)
01-22 19:54:23.027: E/AndroidRuntime(849):  at java.lang.reflect.Method.invoke(Method.java:511)
01-22 19:54:23.027: E/AndroidRuntime(849):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-22 19:54:23.027: E/AndroidRuntime(849):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-22 19:54:23.027: E/AndroidRuntime(849):  at dalvik.system.NativeStart.main(Native Method)
</code></pre>
