2010-10-16 6 views
4

J'utilise Javamail pour s'authentifier dans le serveur Gap IMAP et récupérer les en-têtes des messages pour la boîte aux lettres complète un à la fois et indexer localement. Pour les boîtes de réception qui ont peu de messages, cela fonctionne très bien. Pour les boîtes de réception avec des messages de plus de 10k en général, la connexion javamail imap est supprimée (éventuellement par le serveur). Le point à noter est que cette durée est aléatoire.Javamail IMAP connexion avec Gmail tombe après une durée aléatoire

Étant donné que je récupère continuellement les en-têtes de message, il n'y a pas un moment où la connexion est inactive pendant une longue période, donc il ne peut pas être un délai d'attente.

------------------------------ CODE --------------- -----------------

IMAPSSLStore imapSslStore = connectToImap("imap.googlemail.com", 993, email, oauthToken, oauthTokenSecret, getMyConsumer(), true); 
System.out.println("Successfully authenticated to IMAP.\n"); 
Folder inbox = imapSslStore.getFolder("[Gmail]/All Mail"); 
inbox.open(Folder.READ_ONLY); 

Message messages[] = inbox.getMessages(); 

for(Message message:messages) { 
    System.out.println(message); 
    System.out.println("MSG NO:"+message.getMessageNumber()); 
    System.out.println("FROM:"+message.getFrom().toString()); 
} 

-------------------------- -----CODE--------------------------------------------

trace d'exception:

[java] javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: **Connection dropped by server?** 

[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194) 
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:747) 
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:201) 
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:104) 
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[java] at java.lang.reflect.Method.invoke(Method.java:597) 
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105) 
[java] at org.apache.tools.ant.Task.perform(Task.java:348) 
[java] at org.apache.tools.ant.Target.execute(Target.java:357) 
[java] at org.apache.tools.ant.Target.performTasks(Target.java:385) 
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) 
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1298) 
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1181) 
[java] at org.apache.tools.ant.Main.runBuild(Main.java:698) 
[java] at org.apache.tools.ant.Main.startAnt(Main.java:199) 
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) 
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) 
[java] Caused by: javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped by server? 
[java] at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1198) 
[java] at com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage.java:233) 
[java] at com.google.code.samples.xoauth.XoauthAuthenticator.main(XoauthAuthenticator.java:209) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[java] at java.lang.reflect.Method.invoke(Method.java:597) 
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) 
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) 
[java] ... 20 more 
[java] --- Nested Exception --- 
[java] javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped by server? 
[java] at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1198) 
[java] at com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage.java:233) 
[java] at com.google.code.samples.xoauth.XoauthAuthenticator.main(XoauthAuthenticator.java:209) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[java] at java.lang.reflect.Method.invoke(Method.java:597) 
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) 
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) 
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:747) 
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:201) 
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:104) 
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[java] at java.lang.reflect.Method.invoke(Method.java:597) 
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105) 
[java] at org.apache.tools.ant.Task.perform(Task.java:348) 
[java] at org.apache.tools.ant.Target.execute(Target.java:357) 
[java] at org.apache.tools.ant.Target.performTasks(Target.java:385) 
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) 
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1298) 
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1181) 
[java] at org.apache.tools.ant.Main.runBuild(Main.java:698) 
[java] at org.apache.tools.ant.Main.startAnt(Main.java:199) 
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) 
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) 

J'utilise la version autonome de javamail (1.4.3) J'ai du mal à résoudre ce problème depuis un certain temps maintenant. Toute aide est appréciée.

+0

Pourriez-vous enfin résoudre le problème? Je prévois d'utiliser cela aussi ... – Theo

+0

c'est toujours un problème, malheureusement. nous devons juste ré-essayer après un Google BYE. –

+0

@SaqibAli Avez-vous essayé ma solution? –

Répondre

4

Vous devez capturer l'exception FolderClosedException, puis essayez à nouveau de vous connecter. J'ai fait face à ce problème et résolu par le code suivant:

catch (FolderClosedException ex) { 
         ex.printStackTrace(); 
         ConnectPop3(Username, Password); 
         if (!folder.isOpen()) { 
          folder.open(Folder.READ_ONLY); 
          messages = folder.getMessages(); 
         } 
        } 
Questions connexes