我的应用程序需要临时发送电子邮件。我正在使用 javamail 的 getDefaultSession 和 getTransport 发送邮件,一切都按预期工作。
但是我注意到发送可能需要很长时间 - 每次发送最多 7 秒。如果我分解步骤,像这样:
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage( msg, addresses )
transport.close();
...我可以看到每次几乎所有时间都是 connect() 调用。
我发现的所有示例都是这样做的 - 获取传输、连接、发送、断开连接。但当然它们都是单发示例,或者在一次调用中发送大量电子邮件。
我在想我可以让连接保持打开状态,就像这样:
Transport transport = session.getTransport("smtp");
if (!transport.isConnected())
transport.connect();
transport.sendMessage( msg, addresses )
(这里有一个变体:java mail keeping Transport object connected)。
我最终必须在某种关闭 Hook 中关闭它。而且我可能不得不有一个后备(如果连接已经丢失但传输没有意识到)。但是有什么理由不让它在应用程序生命周期中像这样打开吗?
谢谢, 阿拉斯泰尔
最佳答案
我真的没有发现保持单个 SMTP 连接打开有任何问题,建议使用传输对象来重用连接(参见 JavaMail tutorial)。
此外,我建议您在您的应用程序中只保持一个 smpt 连接(通过传输)打开,将其保持在单个管理器实例中(即使用单例模式),避免为每个需要发送消息的组件。
关于java - 让 javamail session 传输保持打开状态是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334027/