用android 4.2读取gmail收件箱

时间:2014-02-05 01:02:32

标签: android email gmail javamail

我正在尝试使用此代码使用javamail获取gmail收件箱:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import java.util.Properties;

public class HomeActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button emailRead=(Button)findViewById(R.id.button);
        emailRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Runnable r=new Runnable() {
                    @Override
                    public void run() {
                        Properties props = new Properties();
                        props.setProperty("mail.store.protocol", "imaps");

                        Session session = Session.getDefaultInstance(props, null);
                        IMAPStore imapStore = null;

                        try {
                            imapStore = (IMAPStore) session.getStore("imaps");
                            imapStore.connect("imap.gmail.com", "myemail@gmail.com", "mypassword");
                            final IMAPFolder folder = (IMAPFolder) imapStore.getFolder("Inbox");
                            folder.open(IMAPFolder.READ_WRITE);
                            Message m[]=folder.getMessages();
                            for(Message n:m){
                                System.out.println(n.getSubject());
                            }
                        } catch (MessagingException e) {
                            e.printStackTrace();
                        }

                    }
                };
                Thread t=new Thread(r);
                t.start();
            }
        });
    }
}

它可以在模拟器中运行,但是当在真实设备上运行时(具有可用的互联网连接),我经常失败并获得异常:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: imap.gmail.com, 993; timeout -1;
  nested exception is:
    java.net.SocketTimeoutException: failed to connect to imap.gmail.com/2607:f8b0:400e:c02::6c (port 993) after 90000ms

为什么我收到MailConnectException,我该如何解决?


修改: 以下是我尝试过的链接,但结果相同:

1)Reading Gmail mails using android SDK

2)Are there any good short code examples that simply read a new gmail message?

3)Reading all new messages from my gmail using javamail

它只是我在发布之前尝试过的子集。我请求有人请分享live working code,这可以在真实的设备上运行。

EDIT2:

我在三个真实设备上测试了这个。一个是使用wifi上网。另外两个使用Gprs进行网络连接。所以似乎javamail的gmail设置已经改变了android。 javamail代码在桌面java上工作。但是对于android实际设备来说,这似乎很奇怪。

1 个答案:

答案 0 :(得分:0)

U不允许在Android 3.0及更高版本的主UI线程中使用网络。

所以设置aSyncTask来解决你的问题