Java Mail:Session

Kuc*_*chi 10 java email imap jakarta-mail

下面用于连接和执行IMAP文件夹操作的代码.所以我的问题是关于javax.mail.Session在这种情况下每秒重建一次(取决于checkInbox()的休眠时间和运行时间).

我确信这不是一个好的解决方案,特别是对IMAP的调查有点愚蠢,但我无法IMAP listener运行.

不是每次运行都重新创建会话可能是一个更好的解决方案,但我怎么知道何时session is closed或是否可以故意关闭它?但是没有什么Session.close()比Session或者什么更像是NULL?或者会话上有一些已定义的超时...

来源:

final String port = "993";

Properties prop = new Properties();

// I assume there is some redundancy here but this didn't cause any problems so far
prop.setProperty("mail.imaps.starttls.enable", "true");
prop.setProperty("mail.imaps.port", port);

/** This part can be removed
 * prop.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
 * prop.setProperty("mail.imaps.socketFactory.port", port); 
 * prop.setProperty("mail.imaps.socketFactory.fallback", "false"); 
 */
prop.setProperty("mail.imap.ssl.enable", "true");
prop.setProperty("mail.debug", "false");

// Create a session before you loop since the configuration doesn't change
Session session = Session.getInstance(prop);

// Nearly loop forever in Prod
while(true){

    // Check the INBOX and do some other stuff
    Store store = session.getStore("imaps");
    store.connect(host, user, pw);

    // ... the operations on the session ... 

    store.close();

// Sleep a bit try & catch removed
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

总而言之,我不得不说找到javax.mail的好例子和文档真的很难(除了API常见问题解答)

Bil*_*non 13

会话只管理配置信息; 没有必要关闭它.只要您的配置没有更改,您可以在开头创建一次会话,并继续使用它.

另一方面,连接很昂贵,需要由应用程序仔细管理.连接用于存储和每个打开的文件夹.连接可以随时由服务器关闭或由于网络故障而关闭.如果未主动使用连接,则应将其关闭.

您是否在JavaMail项目页面上找到了JavaMail规范和示例应用程序?他们将帮助解决许多简单问题,但连接管理是一个更高级的问题.

哦,你可以删除所有套接字工厂的东西,让你的应用程序更简单.