2012-11-13 4 views
0

저는 javamail과 apache-james를 사용하여 이메일 웹 사이트를 개발했으며 대부분 잘 작동합니다. 그러나 일부 사용자는 Open Fail Exception을 받았으며 새 메일을받을 수 없습니다. 의 코드는 이메일 수신 : 대부분의 경우열려있는 javamail 폴더가 실패했습니다.

Session mailSession = Session.getInstance(System.getProperties(), null); 
mailSession.setDebug(false); 
Store store = null; 
Folder folder = null; //javax.mail.Folder 
try { 
    store = mailSession.getStore(SParam.PROTOCOL); 
    store.connect(Property.getPop3(), userName, password); 
    logger.info("trying to receive emails from james server..."); 
    folder = store.getFolder("INBOX"); 
    try { 
     if (!folder.isOpen()) { 
      folder.open(Folder.READ_WRITE); //the point of throwing the exception 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 
    //receive email from james server. 
} catch (Exception e) { 
    logger.error("Email Receive Error!" + StackTraceStr.st2str(e)); 
    try { 
     folder.close(true); 
    } catch (Exception e2) { 
} 
} finally { 
    try { 
     store.close(); 
    } catch (Exception cloex) { 
    } 
} 

을, 그냥 잘 작동합니다. 그래도 가끔 오류가 발생했습니다.

javax.mail.MessagingException: Open failed; 
nested exception is: 
java.io.IOException: STAT command failed: null 
at com.sun.mail.pop3.POP3Folder.open(POP3Folder.java:228) 
at com.csc.mail.jsh.mail.core.ReceiveMail.receive(ReceiveMail.java:82) 
at com.csc.mail.jsh.mail.core.ReceiveMail.run(ReceiveMail.java:222) 
at java.lang.Thread.run(Thread.java:619) 
Caused by: java.io.IOException: STAT command failed: null 
at com.sun.mail.pop3.Protocol.stat(Protocol.java:366) 
at com.sun.mail.pop3.POP3Folder.open(POP3Folder.java:203) 
... 3 more 

많은 도움을 주신 데 대해 감사드립니다.

디버그 및 디버그가 마침내 STAT 명령을 찾지 못했습니다! STAT 명령에 오류가 발생하면 제임스를 제외하고는 아무런 의미가 없습니다!

21/11/12 14:39:16 ERROR pop3server: Exception during connection from 127.0.0.1  
    (127.0.0.1) : An exception occurred getting a database connection. 
    org.apache.avalon.framework.CascadingRuntimeException: An exception occurred getting a database connection. 
at org.apache.james.userrepository.AbstractJdbcUsersRepository.openConnection(AbstractJdbcUsersRepository.java:617) 
    at org.apache.james.userrepository.AbstractJdbcUsersRepository.getUserByName(AbstractJdbcUsersRepository.java:521) 
    at org.apache.james.userrepository.AbstractUsersRepository.test(AbstractUsersRepository.java:270) 
    at org.apache.james.core.LocalUsersRepository.test(LocalUsersRepository.java:90) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134) 
    at $Proxy4.test(Unknown Source) 
    at org.apache.james.pop3server.POP3Handler.doPASS(POP3Handler.java:537) 
    at org.apache.james.pop3server.POP3Handler.parseCommand(POP3Handler.java:479) 
    at org.apache.james.pop3server.POP3Handler.handleConnection(POP3Handler.java:277) 
    at org.apache.james.util.connection.ServerConnection$ClientConnectionRunner.run(ServerConnection.java:432) 
    at org.apache.excalibur.thread.impl.ExecutableRunnable.execute(ExecutableRunnable.java:55) 
    at org.apache.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:116) 
Caused by: java.sql.SQLException: Listener refused the connection with the following error: 
    ORA-12519, TNS:no appropriate service handler found 
    The Connection descriptor used by the client was: 192.168.250.23:1521:csmis 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:439) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37) 
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) 
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) 
    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) 
    at org.apache.james.util.dbcp.JdbcDataSource.getConnection(JdbcDataSource.java:220) 
    at org.apache.james.userrepository.AbstractJdbcUsersRepository.openConnection(AbstractJdbcUsersRepository.java:614) 
... 15 more 

모든 응용 프로그램은 동일한 서버에서 실행되며 온라인 사용자는 거의 없습니다 (테스트 할 때 나만 사용합니다). 오류가 가끔 나타납니다. 왜?

+0

시간이 오래 걸릴 수있는 서버 측 중단과 유사합니다. 그것은 당신의 서버입니까? 일반 우편 프로그램을 사용할 때도 문제가 발생합니까? –

+0

@AlexandreLavoie [Apache james] (http://james.apache.org/)를 사용하고 있습니다. javamail을 사용하여 나 자신으로 클린트 쪽을 작성하십시오. 현재 약 200 명의 사용자 (자주 사용)와 30,000 개의 전자 메일이 있습니다. – Joshua

+0

최대 동시 세션 또는 연결을 확인 했습니까? IMAP의 서버와 마찬가지로이 종류의 제한에 도달했습니다. 거의 모든 웹 프로그램에는 동시 연결 제한을 설정하는 구성이 있습니다. –

답변

0

아파치 제임스와 접촉하여 결국 대답을 찾았습니다. 여기에서 찾으실 수 있습니다 : STAT command failed occasionally. 페이지 끝 부분에 스레드가 나열되었습니다.

0

메일 서버 문제 인 것 같습니다. STAT 명령은 메시지 수를 표시하는 데 사용됩니다. 일반적으로 STAT은 메일 서버에 성공적으로 연결된 후 실행할 첫 번째 명령입니다.

더 많은 오류 로그를 얻기 위해 디버그 모드로 들어가려면 mailSession.setDebug(true)을 사용해보십시오.

+0

좋은 생각 같습니다. 나는 그것을 수정하고 무슨 일이 일어나는지를 보게 될 것이다. 그러나 로그 파일은 정말로 빠르게 단축되었습니다. 감사합니다 @AlexCheng – Joshua

+0

[2012-11-15 14:22:01] com.csc.mail.jsh.mail.core.ReceiveMail : [INFO] - 제임스 서버에서 이메일을 수신하려고합니다 ... C : STAT S : -ERR C : QUIT S : + OK Apache James POP3 서버에서 로그 오프합니다. [2012-11-15 14:22:03] com.csc.mail.jsh.mail.core.ReceiveMail : [오류] - 폴더 열기 실패 : javax.mail.MessagingException : 열기 실패; 중첩 예외는 다음과 같습니다. java.io.IOException : STAT 명령 실패 : null at com.sun.mail.pop3.POP3Folder.open (POP3Folder.java:228) at com.csc.mail.jsh.mail.core .ReceiveMail.receive (ReceiveMail.java:82) com.csc.mail.jsh.mail.core.ReceiveMail.run ... – Joshua

+0

[apache james에서 이메일을받을 수 없습니다.] (http://stackoverflow.com/ 질문/13393347/이메일 수신 거부 - 아파치 - 제임스/13404596 # comment18476058_13404596) – Joshua