从Apache HtmlEmail中删除所有地址

时间:2012-09-04 23:59:27

标签: java email memory apache-commons

所以最初我编写的营销电子邮件应用程序可以向成千上万的收件人发送电子邮件。我天真地做了这样的事情:

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,但不能包含收件人名称。任何人都可以建议一种方法来做上述之一吗?如果你需要澄清,我理解说话有点难。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这很难看,但似乎HtmlEmail在getToAddresses()方法中公开了内部List。因此,email.getToAddresses()。clear()实际上会清除所有收件人,然后您可以再次使用addTo()。

但这依赖于HtmlEmail类的内部,这绝对不是一个好的编码实践。

相关问题