You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:40:58