2017-05-17 87 views
0

我浪费了至少4个小时的时间来研究能够找到几件事情。我有一个主菜单活动,在登录屏幕后启动。我想要一个GridView,或者一个ListView类型的东西得到更新,并通过列出收件箱邮件来显示它,如果你点击其中的一个,一个新的活动将启动并在textview上显示邮件的发件人,主题和正文等信息。javamail android fecthing电子邮件?

这是我发现的来源之一:Are there any good short code examples that simply read a new gmail message? 试了两个答案,包括由OP提供的答案和回答问题的人。他们两个都没有工作,idk为什么?

错误消息:

05-16 18:35:55.965 1741-1741/app.mailbox E/readMail: Not connected 
                java.lang.IllegalStateException: Not connected 
                 at com.sun.mail.imap.IMAPStore.checkConnected(IMAPStore.java:1992) 
                 at com.sun.mail.imap.IMAPStore.getFolder(IMAPStore.java:1775) 
                 at app.mailbox.GMailReader.readMail(GMailReader.java:58) 
                 at app.mailbox.Menu.onCreate(Menu.java:32) 
                 at android.app.Activity.performCreate(Activity.java:6679) 
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                 at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                 at android.os.Looper.loop(Looper.java:154) 
                 at android.app.ActivityThread.main(ActivityThread.java:6119) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
05-16 18:35:56.029 1741-1780/app.mailbox E/EGL_emulation: tid 1780: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 

这是代码把一些正确的事情后:

package app.mailbox; 

import android.util.Log; 
import java.util.Properties; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.NoSuchProviderException; 
import javax.mail.Session; 
import javax.mail.Store; 

public class GMailReader extends javax.mail.Authenticator { 
    private static final String TAG = "GMailReader"; 

    private String mailhost = "imap.gmail.com"; 
    private Session session; 
    private Store store; 

    public GMailReader(String user, String password) { 
     Properties props = new Properties(); 
     props.setProperty("mail.store.protocol", "imaps"); 
     props.setProperty("mail.imaps.host", mailhost); 
     props.put("mail.imaps.auth", "true"); 
     props.put("mail.imaps.port", "993"); 
     props.put("mail.imaps.socketFactory.port", "993"); 
     props.put("mail.imaps.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.imaps.socketFactory.fallback", "false"); 
     props.setProperty("mail.imaps.quitwait", "false"); 

     if (props == null){ 
      Log.e(TAG, "Properties are null !!"); 
     }else{ 

      Log.d(TAG, "Store: "+props.getProperty("mail.store.protocol")); 
      Log.d(TAG, "Host: "+props.getProperty("mail.imap.host")); 
      Log.d(TAG, "Authentication: "+props.getProperty("mail.imap.auth")); 
      Log.d(TAG, "Port: "+props.getProperty("mail.imap.port")); 
     } 
     try { 
      session = Session.getDefaultInstance(props, null); 
      store = session.getStore("imaps"); 
      store.connect(mailhost, user, password); 
      Log.i(TAG, "Store: "+store.toString()); 
     } catch (NoSuchProviderException e) { 
      e.printStackTrace(); 
     } catch (MessagingException e) { 
      e.printStackTrace(); 
     } 
    } 

    public synchronized Message[] readMail() throws Exception { 
     try { 
      Folder folder = store.getFolder("Inbox"); 
      folder.open(Folder.READ_ONLY); 
      Message[] msgs = folder.getMessages(); 
      return msgs; 
     } catch (Exception e) { 
      Log.e("readMail", e.getMessage(), e); 
      return null; 
     } 
    } 
} 

还做我需要使用异步任务调用从活动这一类,我想的时候列表邮件?

回答

0

复制&粘贴编程的问题是您正在复制所有错误。从修复这些common JavaMail mistakes开始。您将在JavaMail FAQ中找到一般Gmail说明。由于GMailReader构造函数成功返回,即使连接失败,我也无法分辨您是否成功连接。你可能想看看JavaMail debug output

+0

是的,你完全正确。即时通讯的原因是时间短暂。也有点我无法找到任何教程或任何地方的工作示例。 会保持这个更新,再次感谢 – Airborne

+0

在[JavaMail FAQ](https://javaee.github.io/javamail/FAQ)和[JavaMail网站](https:// javaee)中有大量基本的JavaMail示例.github.io/JavaMail的/#样品)。 –