最近遇到一个问题:使用JavaMail收取邮件在系统运行一定时间后,无法成功

最近遇到一个问题:使用JavaMail收取邮件在系统运行一定时间后,无法成功.

出错信息是这样的:

java 代码
  1. DEBUG [DefaultQuartzScheduler_Worker-2] (?:?) - session instance initiated      
  2. DEBUG [DefaultQuartzScheduler_Worker-2] (?:?) - session store set        
  3.  INFO [DefaultQuartzScheduler_Worker-7] (?:?) - Recieving Ticket Emails...     
  4. DEBUG [DefaultQuartzScheduler_Worker-7] (?:?) - session instance initiated      
  5. DEBUG [DefaultQuartzScheduler_Worker-7] (?:?) - session set debug      
  6. DEBUG [DefaultQuartzScheduler_Worker-7] (?:?) - session store set      
  7. ERROR [DefaultQuartzScheduler_Worker-7] (?:?) - Connection could not be established.      
  8. ERROR [DefaultQuartzScheduler_Worker-7] (?:?) - An exception is created. System Message: javax.mail.MessagingException: Connect failed;      
  9.   nested exception is:      
  10.         java.net.ConnectException: Connection refused      
  11.         at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:148)      
  12.         at javax.mail.Service.connect(Service.java:275)      
  13.         at com.akazam.directview.mail.protocols.Pop3.connect(Unknown Source)      
  14.         at com.akazam.directview.mail.protocols.Pop3.connect(Unknown Source)      
  15.         at com.akazam.directview.ticket.troubleticket.email.TicketEmailAPI.getEmail(Unknown Source)      
  16.         at com.akazam.directview.ticket.troubleticket.job.TicketCheckEmailJob.execute(Unknown Source)      
  17.         at org.quartz.core.JobRunShell.run(JobRunShell.java:203)      
  18.         at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)      
  19. Caused by: java.net.ConnectException: Connection refused      
  20.         at java.net.PlainSocketImpl.socketConnect(Native Method)      
  21.         at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)      
  22.         at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)      
  23.         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)      
  24.         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)      
  25.         at java.net.Socket.connect(Socket.java:507)      
  26.         at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:546)      
  27.         at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)      
  28.         at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)      
  29.         at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)      
  30.         at com.sun.mail.pop3.Protocol.<init></init>(Protocol.java:81)      
  31.         at com.sun.mail.pop3.POP3Store.getPort(POP3Store.java:201)      
  32.         at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:144)      
  33.         ... 7 more      
  34.      
  35.  INFO [DefaultQuartzScheduler_Worker-7] (?:?) - Error occurred while checking new emails:   

发现这个问题,真的很奇怪,

测试环境中:使用了一个需要SSL验证邮件服务器(LINUX上运行的SendMail),没有问题

正式运行环境:是一个不需要SSL验证的邮件服务器( Microsoft Exchange Server 2003 POP3 server version 6.5.7638.1),系统运行一段时间后出现问题,每次重启后能正常工作,但是好景不长。

很奇怪,邮件接收程序是根据配置文件自动判断是否使用SSL连接。补上昨天没有写完的。

============================================================================================

今天是解决这个问题的最后期限,呵呵,压力出成绩,找到连接失败的原因了,环境变量在系统运行过程中被改了,导致POP3连接出错,具体如下(但是怎么被改的,还不清楚):

telnet到邮件服务器,用户名密码都没有问题,看来只有程序问题了。

创建MailSession时用到Properties props = System.getProperties();把这个打印出来的时候发现错误了,本来不应该使用SSL验证的,却出现了验证信息不应该出现这个,所以现在在每次POP3链接的时候如果不需要SSL链接都remove这些属性,问题没有了。

java 代码
  1. mail.pop3.socketFactory.port=2008
  2. mail.pop3.socketFactory.fallback=false

 

Why?那边的程序改动了System.getProperties();还是比较奇怪,进一步的观察中。

=========================================后记===================================================

这个问题终于得到圆满的解决:终于知道谁改动了System.getProperties();原来在同一个Tomcat中还运行了另外一个系统,那个系统使用的邮件服务器是采用SSL验证发送接收邮件的,而且15分钟会收取一次邮件,由于程序写的不够严谨,就出现以上的错误,改进了程序后,两个系统终于可以并存于一个容器中。同时也知道了上面那个系统为什么重启后能在一定时间内正常运行,哈哈,而且知道了一定时间其实很短,最多15分钟。

你可能感兴趣的:(java,.net,quartz,socket,sun)