java - 让 javamail session 传输保持打开状态是否可以接受?

标签 java jakarta-mail

我的应用程序需要临时发送电子邮件。我正在使用 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/

相关文章:

java - 从 MimeMessage 中删除附件

java - NetBeans Java 代码格式化程序 : logical operators on new line

java - 如何在小程序表单之间导航?

java - Google Spreadsheet getFeed 错误和理解

java - 发送带有多个文件附件的 HTML 电子邮件?

java - 从 Javamail 中的 smtp 服务器获取 SSL 版本

java - 如何判断一个 jar 是在 64 位还是 32 位系统上编译的?

java - 不同初始容量和负载因子的HashMap性能

JavaMail 传输大型二进制 MIME 消息(rfc3030)

java - 我想使用java发送邮件而不延迟