나는 우편물 작업을하고 있습니다. 앱에서 여러 수신자 주소를 수신 할 수 있습니다. "보내기"버튼을 누르면 여러 수신자 주소가 포함 된 단일 메시지가 전송됩니다. 물론 이러한 종류의 시스템을 사용하면 적어도 하나의 주소가 유효하지 않은 경우 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
그게 문제입니다. 만약 내가 잘못된 주소를 모두 넣었 으면, "else"부분으로 가려고하지 않습니다. – user3643117
'e.getValidUnsentAddresses()'가 null이 아니므로, 이것을 설정하는 논리를 가진 코드를 넣어야합니다. 필드와 그것을 얻는 등 내가 당신을 도울 수있게하는 것 –
내가 여기에 모든 코드를 배치하면 꽤 길다. 기본적으로받는 사람을 입력 할 수있는 GUI가 있습니다. "추가"버튼을 누르면 DefaultListModel 객체에 전자 메일 주소를 추가 할 수 있습니다. "보내기"버튼을 누르면 메시지 자체를 만드는 메소드가 호출됩니다. 이 메소드에는 DefaultListModel 객체의 모든 내용을 추출하여 수신자로 추가하는 루프가 있습니다. – user3643117