从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对象?
答案 0 :(得分:2)
它不是由规范定义的,但每次发送消息时都会从Properties对象中读取“mail.smtp.from”属性,因此您可以更改创建会话时使用的Properties对象中的属性。它会看到变化。
如果这看起来有点太“模糊”,您可以使用SMTPMessage对象而不是MimeMessage对象,并为每个收件人调用setEnvelopeFrom方法。
答案 1 :(得分:0)
自JavaMail 1.5起,Message
通过getSession()
展示了它的会话。 会话的某些部分可以通过这种方式进行更改 - 尽管我还没有详细信息(其中)在创建时将哪些部分传递给Transport
。但你可能只是尝试。