异常后继续 for 循环 java

Continue for loop after exception java

这是我的代码:

if (Recipients_To != null) {
    for (int i = 0; i < Recipients_To.length; i++) {
        message.setRecipients(Message.RecipientType.TO, Recipients_To[i].toString());
        Transport.send(message);
    }
}

我有 500 多个收件人列表要发送邮件,此 代码将向每个收件人发送个人邮件。但是,如果我在这个 for 循环 之间遇到异常,我想继续对剩余的收件人进行循环 。我该怎么办?

你可以捕获异常,例如

try {
    message.setRecipients(Message.RecipientType.TO, Recipients_To[i].toString());
    Transport.send(message);
} catch (Exception e) {
    // handle it or leave it be
}

你可以试试这样的

if (Recipients_To != null) {
    for (int i = 0; i < Recipients_To.length; i++) {
        try {
            message.setRecipients(Message.RecipientType.TO, Recipients_To[i].toString());
            Transport.send(message);
        } catch (Exception exp) {
            //Log your exception here or do whatever you want to happen in case of exception
        }
    }
}

您想使用 try catch 块来执行此操作,就像这样

for (int i = 0; i < Recipients_To.length; i++) 
{
    try {
       message.setRecipients(Message.RecipientType.TO,Recipients_To[i].toString());
       Transport.send(message);
    }
    catch (YourException e){
       //Do some thing to handle the exception
    }
}

这会捕获潜在的问题,并且在处理异常后仍会继续 for 循环。

从技术上讲,这只是捕获异常的问题(请参阅 Murat K 的回答)。但是,我建议,既然您正在发送电子邮件,那么在第一个异常发生时就停止发送其余部分,除非您确定这是一个可以安全忽略的错误。一些可能出错的例子:

  • 无效凭据:这意味着如果您继续尝试发送,每次后续尝试也将失败。最好的情况:没有发送电子邮件。最坏情况:由于登录失败次数过多,SMTP 服务器阻止您访问。
  • 格式错误的收件人地址:继续尝试其他地址没有问题,但您需要针对此错误采取措施(从列表中删除收件人以便以后发送邮件)
  • 邮件服务器地址配置错误:循环的每次迭代都会尝试连接到邮件服务器,但都失败了。这将极大地减慢该方法(服务器超时)或向您的日志发送垃圾邮件(假设您做了一些例外情况)

因此,请在处理电子邮件时仔细考虑您的行动方案。