【问题标题】:Reading gmail inbox with android 4.2 up使用 android 4.2 阅读 gmail 收件箱
【发布时间】:2014-03-01 06:17:29
【问题描述】:

我正在尝试使用带有此代码的 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 真实设备上似乎有些奇怪。

【问题讨论】:

  • 您要求工作代码-但您没有共享您的代码。你应该展示什么不起作用,所以我们知道应该避免什么。
  • @Phil 查看相关链接。
  • @Phil 否决票的任何理由?它认为这是一个真正的问题,因为 javamail 是最受欢迎的,而且我认为 java 中唯一一个发送/阅读电子邮件的 api。该代码用于android的早期版本。似乎gmail设置有一些变化或api已经过时了。
  • 我相信,因为问题中没有代码,显然您在答案中要求代码,所以这个问题写得不好。来自FAQ:“并非所有问题都受益于包含代码。但如果您的问题与您编写的代码有关,您应该包含一些。”
  • @Phil 查看代码。我已附上

标签: android email gmail jakarta-mail


【解决方案1】:

从 android 3.0 及以上版本开始,您不得在主 UI 线程中使用网络。

所以设置一个同步任务来解决你的问题

【讨论】:

  • 大声笑看我的代码。我正在另一个线程中访问收件箱。在 android 3.0 以上,如果你尝试访问网络,你的应用就会崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多