Java 从Apache HtmlEmail中删除所有收件人地址
因此,最初我编写了一个营销电子邮件应用程序,可以向数千名收件人发送电子邮件。我天真地做了这样的事情:Java 从Apache HtmlEmail中删除所有收件人地址,java,email,memory,apache-commons,Java,Email,Memory,Apache Commons,因此,最初我编写了一个营销电子邮件应用程序,可以向数千名收件人发送电子邮件。我天真地做了这样的事情: for(all emails) { HtmlEmail email = new HtmlEmail(); email.setBody(theHtml); email.addTo(currentEmail); email.send(); } 上面的问题是,在发送了这么多电子邮件之后,垃圾收集器必须启动并删除陈旧的HtmlEmail对象,这会占用大量CPU。我现在正
for(all emails)
{
HtmlEmail email = new HtmlEmail();
email.setBody(theHtml);
email.addTo(currentEmail);
email.send();
}
上面的问题是,在发送了这么多电子邮件之后,垃圾收集器必须启动并删除陈旧的HtmlEmail对象,这会占用大量CPU。我现在正在尝试做如下事情:
HtmlEmail email = new HtmlEmail();
email.setBody(theHtml);
for(all emails)
{
//Option1: Use below line of code but need to remove the previous "current email"; that is, not send this to all the previous recipients AND the new one
//Line to remove previous email from HtmlEmail object
email.addTo(currentEmail, currentName);
//or option 2: email.setTo(new String[]{currentEmail});
}
未注释方法的问题是addTo不会删除以前添加的电子邮件地址。我当然不想发送相同的电子邮件给相同的收件人。非常非常灾难。因此,如果我使用这种方法,我需要一种方法来删除以前的电子邮件。我想做一些像
email.setTo(Arrays.asList(new String[]{}));
问题是api声明所有包含字符串的字符串必须是有效的电子邮件地址,否则会引发异常。另一个选项是每次使用
email.setTo
,但不能包括收件人姓名。有人能推荐一种方法来完成上述任务吗?如果你需要澄清,我理解用语言表达有点困难。提前感谢。这很难看,但HtmlEmail似乎在getToAddresses()方法中公开了内部列表。因此,email.getToAddresses().clear()实际上会清除所有收件人,然后您可以再次使用addTo()
但这依赖于HtmlEmail类的内部结构,这显然不是一个好的编码实践。嘿,非常感谢您的发现。我看了一眼,你说的没错。当然是奇怪的API。