JavaMail:在重用传输时向会话添加属性
JavaMail: Adding properties to a session while reusing Transport
根据 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 的属性,同时仍然重用相同的传输对象?
从 JavaMail 1.5 开始,Message
通过 getSession()
展示它的会话。 会话的某些部分 可以这样更改 - 尽管我还没有详细信息(但)其中哪些被传递给创建时的 Transport
。但你可以试试。
规范没有定义,但是"mail.smtp.from" 属性是每次发送消息时从Properties对象中读取的,所以你可以在Properties中更改属性创建会话时使用的对象,它将看到更改。
如果这看起来有点过分 "obscure",您可以为每个收件人使用 SMTPMessage object instead of a MimeMessage object and call the setEnvelopeFrom 方法。
根据 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 的属性,同时仍然重用相同的传输对象?
从 JavaMail 1.5 开始,Message
通过 getSession()
展示它的会话。 会话的某些部分 可以这样更改 - 尽管我还没有详细信息(但)其中哪些被传递给创建时的 Transport
。但你可以试试。
规范没有定义,但是"mail.smtp.from" 属性是每次发送消息时从Properties对象中读取的,所以你可以在Properties中更改属性创建会话时使用的对象,它将看到更改。
如果这看起来有点过分 "obscure",您可以为每个收件人使用 SMTPMessage object instead of a MimeMessage object and call the setEnvelopeFrom 方法。