2014-05-23 1 views
0

나는 우편물 작업을하고 있습니다. 앱에서 여러 수신자 주소를 수신 할 수 있습니다. "보내기"버튼을 누르면 여러 수신자 주소가 포함 된 단일 메시지가 전송됩니다. 물론 이러한 종류의 시스템을 사용하면 적어도 하나의 주소가 유효하지 않은 경우 SendFailedException이 발생합니다. 당연히이 예외를 잡아서 해결하려고 노력할 것입니다. 여기 내 코드는 지금까지의 : 마지막에 그런getValidUnsentAddresses() if-else 조건이 의도 한대로 작동하지 않습니다.

for (int i=0; i<listModel.getSize(); i++) //listModel is of DefaultListModel Class 
{ 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress((String)listModel.getElementAt(i))); 
} 

: 문제 위에 지금

properties = System.getProperties(); 
session = Session.getDefaultInstance(properties); 
transport = session.getTransport("smtp"); 
transport.connect(host, textEmail.getText(), new String(pwdPassword.getPassword())); 
transport.sendMessage(message, message.getAllRecipients()); // <----this part throws the SendFailedException 
transport.close(); 

catch (SendFailedException e) 
     { try 
      { 
       System.out.println(e.getValidUnsentAddresses()!=null); 
       if (e.getValidUnsentAddresses()!=null) //with valid unsent addresses 
       { 
        String invalid = new String(); 
        String valid = new String(); 
        for (int i=0; i<e.getInvalidAddresses().length; i++) 
        { 
         invalid = invalid + e.getInvalidAddresses()[i].toString(); 
         if (i+1<e.getInvalidAddresses().length) 
         { 
          invalid = invalid + ", "; 
         } 
        } 

        for (int i=0; i<e.getValidUnsentAddresses().length; i++) 
        { 
         valid = valid + e.getValidUnsentAddresses()[i].toString(); 
         if (i+1<e.getValidUnsentAddresses().length) 
         { 
          valid = valid + ", "; 
         } 
        } 

        int choice = JOptionPane.showOptionDialog(null, invalid + " are invalid addresses. Send mail to valid addresses?", "Information", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, "No"); 
        if (choice==0) 
        { 
         transport.sendMessage(message, e.getValidUnsentAddresses()); 
         JOptionPane.showMessageDialog(null, "Sent message to " + valid + ".", "Information", JOptionPane.INFORMATION_MESSAGE); 
        } 
       } 

       else //no valid unsent addresses 
       { 
        JOptionPane.showMessageDialog(null, "All email addresses are invalid.", "Information", JOptionPane.ERROR_MESSAGE); 
       } 
      }  

      catch(MessagingException e2) 
      { e2.printStackTrace(); } 

     } 

루프는 수신자가 메시지에 주소를 추가 할 수 있습니다. catch 블록 안에 if-else 문이 있음을 알 수 있습니다. 수신자에게 유효한 미 송신 주소가 있는지 확인하고 싶었습니다. 이 방법은받는 사람에 잘못된 주소 만있는 경우 알 수 있습니다 (예외로 인해 보낼 수 없기 때문에 유효한 보낸 주소가 없기 때문에).

시스템에서 몇 가지 테스트를 실행했습니다. 모든 주소가 유효하면 제대로 작동하지만 하나의 유효하지 않은 주소가 포함되면 사소한 문제가 나타납니다. 받는 사람에게 잘못된 주소 만 입력하면 "else"부분으로 이동해야하지만 대신 항상 "if"부분에서 끝납니다.

사소한 문제 일 뿐이지 만 (여전히 프롬프트에 관한 것임) 저는 여전히 내 조건이 작동하지 않는 이유를 알고 싶습니다. 나는에 대해 뭔가를 누락 될 수있는 SendFailedException

답변

0

모든 잘못된 주소를 넣어 시도하고 경우에도 하나 개의 유효한 주소가

e.getValidUnsentAddresses(); 

가 반환하지 않습니다 때문에 매번 실행되는 경우는

작동합니다 널

+0

그게 문제입니다. 만약 내가 잘못된 주소를 모두 넣었 으면, "else"부분으로 가려고하지 않습니다. – user3643117

+0

'e.getValidUnsentAddresses()'가 null이 아니므로, 이것을 설정하는 논리를 가진 코드를 넣어야합니다. 필드와 그것을 얻는 등 내가 당신을 도울 수있게하는 것 –

+0

내가 여기에 모든 코드를 배치하면 꽤 길다. 기본적으로받는 사람을 입력 할 수있는 GUI가 있습니다. "추가"버튼을 누르면 DefaultListModel 객체에 전자 메일 주소를 추가 할 수 있습니다. "보내기"버튼을 누르면 메시지 자체를 만드는 메소드가 호출됩니다. 이 메소드에는 DefaultListModel 객체의 모든 내용을 추출하여 수신자로 추가하는 루프가 있습니다. – user3643117