Java Mail - 创建电子邮件通知系统的最佳实践/有效方法

标签 java jakarta-mail weblogic12c

我正在编写一个系统,一旦将工作分配给用户,该系统就会向用户发送电子邮件通知。

正如您可以想象的那样,“建立与邮件服务器的连接”是昂贵的。

我想要一种重用相同连接的方法。问题是邮件服务器在某些时候会“终止”连接(由于不活动等)。

此外,我不想每次发送电子邮件时都创建 Session 对象...应使用相同的 session 对象。

这是我的 EJB 方法的样子:

@Asynchronous
public Future<String> sendEmail(String email) {
   .....
   //I want to reuse the same session object. What if another
   //application runs in the same JVM and creates the session
   //object before mine? My properties will be ignored? Probably Yes.

   Session session = Session.getDefaultInstance(props);
   try{
       // Instantiate a message
       Message msg = new MimeMessage(session);
       .....
       //This will create and close the connection each time...
       Transport.send(msg);
      }
   finally{....}
}

最佳答案

您可以重用 Session 对象,但您需要找出应用程序中创建它并存储它以供重用的最佳位置。

传输对象也是如此,但正如您所指出的,您的应用程序必须处理这样一个事实:如果您不对其进行任何操作,邮件服务器不希望您保持连接打开,因此将关闭连接。当您检测到此情况时,需要重新连接。

如果您要发送大量电子邮件,您可能希望将所有通知请求发送到单独的线程或任务或其他内容,然后从那里发送电子邮件。您可能希望批量通知并每天、每小时、每分钟或任何适合您的应用程序的时间发送出去。

如您所见,没有一种最佳实践可以处理所有这些问题。这在很大程度上取决于您的应用程序的需求。

关于Java Mail - 创建电子邮件通知系统的最佳实践/有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305905/

相关文章:

java - 每5秒用java扫描一个表sql

java - 如何以 12 小时格式而不是 24 小时格式显示时间 - timeEt.setIs24HourView(false);不管用

java - 组合圆弧和矩形时出现小间隙

java - 可用的密码网络应用程序

java - log4j2.xml 属性替换 ${ } 在 WebLogic 12.2.1 中不起作用

weblogic12c - java.util.ServiceConfigurationError : javax. xml.stream.XMLInputFactory : Provider com. ctc.wstx.stax.WstxInputFactory 不是子类型

java - 情况下的 Hibernate 映射,其中键也用作多对一参数

java - 如何使用 Spring Integration 访问邮箱文件夹

java - JVM 中有多少个对象是太多了?

linux - 在 docker 容器中运行的应用程序在 docker 主机中无法访问