我正在修复一个负责发送电子邮件的类。它看起来像这样(简化):
/* ... */
Properties props = System.getProperties();
props.put("mail.smtp.host", A_VALID_IP_OF_MAIL_SERVER);
Session session = Session.getDefaultInstance(props, null);
try {
Message msg = new MimeMessage(session);
/* msg.setFrom(); msg.addRecipient(); etc. */
Transport.send(msg);
System.out.println("Sent!");
}
catch (Exception e) { /* ... */ }
/* ... */
在我的工作中,我将session
设置为null
,令我非常惊讶的是,类仍然可以正常工作。如果我把null
传递给MimeMessage
构造函数也没有关系,它不会抛出异常或其他任何错误。此外,Transport.send()
方法包括以下几行代码:
240 Session s = (msg.session != null) ? msg.session :
241 Session.getDefaultInstance(System.getProperties(), null);
因此,如果session
是null
,它只会使用系统属性创建一个新的Session
对象。那么创建Session
对象的目的是什么呢?如果无论传递什么参数都没有关系,为什么MimeMessage
没有一个默认的构造函数呢?我查看了一些使用javax.mail的示例,例如:Google的示例和tutorialspoint的示例,它们都创建了一个似乎很无用的
Session
对象。为什么会有人这样做呢?