Java Mail最佳实践/创建电子邮件通知系统的有效方法
我正在编写一个系统,一旦一项工作分配给用户,它就会向用户发送电子邮件通知
正如你所想象的,“建立与邮件服务器的连接”是昂贵的
我想要一种重复使用相同连接的方法。问题是邮件服务器在某个时候会“终止”连接(因为不活动等)
此外,我不想每次发送电子邮件时都创建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{....}
}
# 1 楼答案
您可以重用会话对象,但需要找出应用程序中创建它并存储它以供重用的最佳位置
同样,Transport对象也是如此,但正如您所指出的,您的应用程序必须处理这样一个事实:如果您不使用邮件服务器,它不希望您保持连接打开,因此将关闭连接。当你检测到这一点时,你需要重新连接
如果你要发送大量的电子邮件,你可能会想把所有的通知请求发送到一个单独的线程或任务或其他任何地方,然后从那里发送电子邮件。您可能希望成批发送通知,并每天、每小时、每分钟或任何适合您的应用程序的时间发送通知
正如你所看到的,没有一个最佳实践来处理所有这些问题。这在很大程度上取决于应用程序的需求