JavaMail:在重用Transport时向会话添加属性

时间:2015-12-14 15:45:18

标签: java javamail

从JavaMail FAQ中,这是发送群发邮件的最佳方式:

MimeMessage msg = ...;
// construct message
msg.saveChanges();
Transport t = session.getTransport("smtp");
t.connect();

for (int i = 0; .....) {
    t.sendMessage(msg, new Address[] { recipients[i] });
}

t.close();

但是,要创建会话,我们需要这样做:

Session session = Session.getInstance(properties);

这意味着在创建会话之前需要设置属性。如果我使用像VERP这样的东西,那么这可能会有问题,其中“From”属性对于每个收件人都是不同的。那么,有没有一种方法可以动态设置Session的属性,同时仍然重用相同的Transport对象?

2 个答案:

答案 0 :(得分:2)

它不是由规范定义的,但每次发送消息时都会从Properties对象中读取“mail.smtp.from”属性,因此您可以更改创建会话时使用的Properties对象中的属性。它会看到变化。

如果这看起来有点太“模糊”,您可以使用SMTPMessage对象而不是MimeMessage对象,并为每个收件人调用setEnvelopeFrom方法。

答案 1 :(得分:0)

自JavaMail 1.5起,Message通过getSession()展示了它的会话。 会话的某些部分可以通过这种方式进行更改 - 尽管我还没有详细信息(其中)在创建时将哪些部分传递给Transport。但你可能只是尝试。