群发邮件时如何让各收件人仅在收件人栏看到自己的邮箱地址?
Java 邮件群发单显解决方案
要实现每个收件人仅能看到自身地址在收件人栏,采用复用SMTP连接单独给每个收件人发信的方案即可解决,性能和批量发送几乎没有差异,也能避免BCC模式隐去所有收件人信息的问题。
实现逻辑
- 仅建立一次SMTP连接,避免重复建联带来的性能损耗
- 遍历所有收件人,为每个收件人单独构造邮件实例,邮件的TO字段仅填写当前收件人地址
- 复用已建立的SMTP连接批量发送所有单收件人邮件,全部发送完成后再关闭连接
修改后可运行代码
Transport trans = session.getTransport("smtp"); trans.connect(); try { // 遍历所有收件人逐个发送 for (Address recipient : toClient) { // 为当前收件人构造独立邮件对象 MimeMessage singleMsg = new MimeMessage(session); singleMsg.setFrom(new InternetAddress("test44@test.com", "test account")); // 仅设置当前单个收件人为收件人 singleMsg.setRecipient(Message.RecipientType.TO, recipient); singleMsg.setSubject(title); singleMsg.setContent(content, "text/html; charset=UTF-8"); singleMsg.saveChanges(); // 发送当前邮件 trans.sendMessage(singleMsg, new Address[]{recipient}); } } catch (Exception e) { e.printStackTrace(); } finally { trans.close(); }
补充说明
如果需要针对不同收件人做内容个性化替换,直接在遍历循环中修改content内容即可,扩展成本极低。
内容的提问来源于stack exchange,提问作者seong jin
相关产品推荐
相关产品推荐

