JavaMail API中提供了批量处理邮件的命令,例如在JavaMail提供的demo中的mover.java示例中有如下代码:
Message[] msgs = folder.getMessages(start, end);
if (msgs.length != 0) {
folder.copyMessages(msgs, dfolder);
folder.setFlags(msgs, new Flags(Flags.Flag.DELETED), true);
}
可以讲Message对象数组作为参数,供Folder的copyMessages方法和setFlags方法批量处理邮件。在以下情况下会发生null错误:
使用IMAPFolder的getMessagesByUID(long[] uids)方法获取Message数组,如果uids数组中有一个邮件服务器上并不存在的UID,则返回的Message数组中相应的位置上会有一个null,将该Message数组传递给Folder的copyMessages方法和setFlags方法时会发生null异常。
正确的处理方式:
Message[] messages = folder.getMessagesByUID(uids);
if (messages != null && messages.length > 0) {
for (int i = 0; i < messages.length; i++) {
if (messages[i] != null) {
messages[i].setFlag(Flags.Flag.DELETED, true);
}
}
}