我正在尝试使用此代码使用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实际设备来说,这似乎很奇怪。
答案 0 :(得分:0)
U不允许在Android 3.0及更高版本的主UI线程中使用网络。
所以设置aSyncTask来解决你的问题