【发布时间】: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