gpt4 book ai didi

java - javax.mail.Session有什么用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:51 25 4
gpt4 key购买 nike

我正在修复一个负责发送电子邮件的类。它看起来像这样(简化):

/* ... */
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) { /* ... */ }
/* ... */

在我的工作中,我设置了 sessionnull令我非常惊讶的是,类(class)仍然运行良好。我通过了没关系 nullMimeMessage构造函数。它不会抛出异常或任何东西。此外,Transport.send()方法包括以下几行:

240 Session s = (msg.session != null) ? msg.session :
241 Session.getDefaultInstance(System.getProperties(), null);

所以如果 session 是null它只是使用系统属性创建一个新的。那么创建 Session 的目的是什么?对象吗?为什么不 MimeMessage如果传入的内容无关紧要,是否有一个默认构造函数?

我查看了一些使用 javax.mail 的示例,例如:example from Googleexample from tutorialspoint他们都创建了一个 Session看起来很无用的对象。为什么会有人这样做?

最佳答案

What is then the purpose of creating a Session object at all?

session 是您将如何与邮件主机交互的上下文。这包括但不限于邮件主机的调试输出、超时和身份验证机制。如果您想以不同的方式与同一邮件主机进行交互,那么 session 就是保存此信息的对象。

如果单个 JVM 需要连接到多个邮件服务器,则需要两个不同的 session 。这在 JavaMail FAQ 中有详细解释。 :

If some other code in the same JVM (e.g., in the same app server) has already created the default Session with their properties, you may end up using their Session and your properties will be ignored. This often explains why your property settings seem to be ignored. Always use Session.getInstance to avoid this problem.

大多数 JavaMail 示例无法通过 common mistakes测试。尝试引用 JavaMail API sample programs Session.getDefaultInstance 很少是任何代码的正确选择。大多数代码应使用 Session.getInstance。包含 MimeMessage 的默认构造函数只会鼓励错误行为。

关于java - javax.mail.Session有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com