Остановка очереди Java для обработки электронной почты - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть программа, как показано ниже, которая продолжает получать сообщения электронной почты для отправки.Он работал хорошо без каких-либо ошибок.Внезапно я замечаю, что не отправляю электронную почту без сгенерированных ошибокНиже приведен фрагмент кода.В моем основном я уже инициализирую его new Thread(new MailProcessor()).start();, снаружи я поместил этот приватный LinkedBlockingQueue<String> eMailQueue = new LinkedBlockingQueue<String>();, и из другого класса я называю его так eMailQueue.add(sendEmailMessage);.Я перезапустил его, он вернулся к нормальной работе, и я хотел бы знать, почему он остановился на эти несколько часов?

  class MailProcessor implements Runnable {
     public void run() {

      Properties props = new Properties();      
      props.put("mail.smtp.host", "smtp.gmail.com");        
      props.put("mail.smtp.socketFactory.port", "465");     
      props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");      
      props.put("mail.smtp.auth", "true");      
      props.put("mail.smtp.port", "465");       
      Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator() 
      {             
        protected PasswordAuthentication getPasswordAuthentication() 
        {                   
        return new PasswordAuthentication("*****","******");                
        }       
      });         
       try
       {
         while (true) {

                   try 
                   {
                    int count=0;
                    String emailMessageString = "";
                    emailMessageString = eMailQueue.take();
                    if (emailMessageString.equals(null)) {
                       System.out.println("Email Processor is shutting down");
                    break; // exit while loop, ends run() method
                    }
                       try 
                       {
                            String[] eMArray = null;
                            eMArray = emailMessageString.split("@EmL@");

                            Message emailMessage = new MimeMessage(session);            
                            emailMessage.setFrom(new InternetAddress("scvmgr@gmail.com"));
                            emailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(eMArray[1]));
                            //System.out.println("EArray Length is :"+eMArray.length+"  "+"Second Email :"+eMArray[2]);
                            if(eMArray.length==3)
                            {
                             String cc1 = eMArray[2];
                             emailMessage.addRecipient(Message.RecipientType.CC,new InternetAddress(cc1));
                            }
                            //emailMessage.setRecipients(Message.RecipientType.CC,InternetAddress.parse(eMArray[2]));
                            //emailMessage.addRecipient(Message.RecipientType.CC,new InternetAddress(cc1));
                            String cc2 = "******";
                            emailMessage.addRecipient(Message.RecipientType.CC,new InternetAddress(cc2));
                            System.out.println("\n\nAlready in add receiptntTypeCC : "+emailMessageString);

                            emailMessage.setRecipients(Message.RecipientType.BCC,InternetAddress.parse("shaimyhtc@gmail.com"));
                            emailMessage.setSubject("******");
                            emailMessage.setText(eMArray[0]);
                            //eMailQueue.add(emailMessage);  
                            Transport.send(emailMessage);
                            System.out.println("\n\nSend email :"+eMArray[0]);

                       }
                       catch (Exception e) 
                       {
                       System.out.println("Transport Problem");
                       e.printStackTrace();
                       } 
                   }
                   //System.out.println("Processing " + message);
                   //catch (IOException ex)  
                   catch (Exception e) 
                   {
                    e.printStackTrace();
                   }     

         }
        }
        catch(Throwable th)
        {
          th.printStackTrace();
        }

      }

   }

Ответы [ 2 ]

0 голосов
/ 11 декабря 2011

Я предлагаю вам заменить ваши sysouts на систему регистрации (посмотрите на этот вопрос ). Будет намного лучше узнать, что произошло, изучив файл журнала.

0 голосов
/ 11 декабря 2011

Поместите (catch Throwable) вне цикла while и запишите это.Если это произойдет, выйдите и перезапустите программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...