我使用外部邮件服务器发送SMTP邮件,这个服务器实际上是我无法控制的。
最近有几次这个邮件服务器遇到了问题,这导致我的Java(Struts / Spring)应用程序在等待邮件服务器的回复时完全挂起。
我正在使用Spring org.springframework.mail.javamail.JavaMailSender 发送邮件。
当外部邮件服务器出现问题时,以下行会冻结 mailEngine.send(mailMessage);
我不介意有时候电子邮件没有被发送但是如何在等待SMTP服务器的回复时阻止它冻结我的应用程序?
是否有适合Java的电子邮件排队解决方案?
答案 0 :(得分:1)
您可以在后台主题中发送电子邮件。
答案 1 :(得分:1)
将您的呼叫线程连接到SMTP服务器。您可以使用ExecutorService(存在各种实现)并放入Runnables
以便在稍后阶段(带外)执行。这种方法的优点是您不必显式编写线程模型。
如果您在提交时从Executor收集Future对象,则可以在适当的超时时调用get()
并在超时时取消(并可能重新提交/重试)。