getValidUnsentAddresses()if-else条件不能按预期运行

时间:2014-05-23 04:05:36

标签: java exception if-statement javax.mail

我正在开发邮件应用。该应用可以接收多个收件人地址。一旦发送"发送"按下按钮,发送包含多个收件人地址的单个邮件。当然,通过使用这种系统,如果至少有一个地址无效,则会出现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

的内容

1 个答案:

答案 0 :(得分:0)

尝试输入所有无效的地址,它应该可以正常工作

如果每次都执行,因为即使有一个有效地址

e.getValidUnsentAddresses();

不会返回null