加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

javax.mail.Session有什么用?

发布时间:2020-12-14 05:40:12 所属栏目:Java 来源:网络整理
导读:我正在修一个负责发送电子邮件的班级.它看起来像这样(简化): /* ... */Properties props = System.getProperties();props.put("mail.smtp.host",A_VALID_IP_OF_MAIL_SERVER);Session session = Session.getDefaultInstance(props,null); try { Message msg
我正在修一个负责发送电子邮件的班级.它看起来像这样(简化):
/* ... */
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) { /* ... */ }
/* ... */

在我的工作中,我将会话设置为null,令我惊讶的是,课程仍然很好.如果我将null传递给MimeMessage构造函数并不重要.它不会抛出异常或任何东西.此外,Transport.send()方法包括以下行:

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

因此,如果会话为null,则只使用系统属性创建一个新会话.那么创建一个Session对象的目的是什么呢?为什么MimeMessage没有默认构造函数,如果你传递的内容无关紧要?

我查看了许多使用javax.mail的例子,例如:example from Google和
example from tutorialspoint并且它们都创建了一个看起来很无用的Session对象.为什么有人这样做?

解决方法

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

会话是您与邮件主机进行交互的上下文.这包括但不限于调试来自邮件主机的输出,超时和身份验证机制.如果要以不同方式与同一邮件主机进行交互,则会话是保存此信息的对象.

如果单个JVM需要连接到多个邮件服务器,则需要两个不同的会话.这在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的默认构造函数只会鼓励错误的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读