我正在开发邮件应用。该应用可以接收多个收件人地址。一旦发送"发送"按下按钮,发送包含多个收件人地址的单个邮件。当然,通过使用这种系统,如果至少有一个地址无效,则会出现SendFailedException。当然,我会抓住这个和例外并尝试解决它。到目前为止,这是我的代码:
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(); }
}
循环以将收件人地址添加到邮件:
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块里面有一个if-else语句。我想检查收件人中是否有任何有效的未发送地址。通过这种方式,我可以知道收件人中是否只有无效地址(因为由于异常而无法发送消息,因此没有有效的发送地址)。
我在系统上运行了一些测试。如果所有地址都有效,它可以正常工作,但是,当包含单个无效地址时,会出现一个小问题。如果我只在收件人中放入无效地址,则应该转到&#34; else&#34;部分,但它总是最终在&#34;如果&#34;声明的一部分。
虽然这只是一个小问题(它只是关于提示),但我仍然想知道为什么我的病情不起作用。我可能会遗漏一些关于SendFailedException
的内容答案 0 :(得分:0)
尝试输入所有无效的地址,它应该可以正常工作
如果每次都执行,因为即使有一个有效地址
e.getValidUnsentAddresses();
不会返回null