Java使用Javax.mail批量发邮件异常:仅发送首/尾收件人
问题原因与解决方案
你的代码核心问题是循环中反复调用setRecipients方法——这个方法的作用是替换当前收件人类型(这里是BCC)下的所有收件人,每循环一次就会把之前设置的收件人全部清空,只保留当前循环的邮箱地址,最终自然只有最后一个收件人能收到邮件。
修正方案一:一次性设置所有收件人
先把从数据库获取的邮箱列表转换成InternetAddress数组,再一次性设置:
// 将List<String>转为InternetAddress数组 InternetAddress[] bccAddresses = new InternetAddress[emails.size()]; for (int i = 0; i < emails.size(); i++) { bccAddresses[i] = new InternetAddress(emails.get(i)); } // 一次性设置所有BCC收件人 msg.setRecipients(Message.RecipientType.BCC, bccAddresses);
修正方案二:使用追加方法添加收件人
改用addRecipients方法,每次循环向BCC列表中追加收件人,而不是替换:
for (String email : emails) { msg.addRecipients(Message.RecipientType.BCC, InternetAddress.parse(email, false)); }
关键区别说明
setRecipients(RecipientType type, Address[] addresses):直接替换该类型下的所有收件人addRecipients(RecipientType type, Address[] addresses):在该类型的收件人列表末尾追加新的收件人
内容的提问来源于stack exchange,提问作者khabz
相关产品推荐
相关产品推荐

