从Java发送电子邮件时SMTP服务器挂起时的帮助

时间:2010-03-02 14:03:00

标签: java email smtp queue

我使用外部邮件服务器发送SMTP邮件,这个服务器实际上是我无法控制的。

最近有几次这个邮件服务器遇到了问题,这导致我的Java(Struts / Spring)应用程序在等待邮件服务器的回复时完全挂起。

我正在使用Spring org.springframework.mail.javamail.JavaMailSender 发送邮件。

当外部邮件服务器出现问题时,以下行会冻结 mailEngine.send(mailMessage);

我不介意有时候电子邮件没有被发送但是如何在等待SMTP服务器的回复时阻止它冻结我的应用程序?

是否有适合Java的电子邮件排队解决方案?

2 个答案:

答案 0 :(得分:1)

您可以在后台主题中发送电子邮件。

答案 1 :(得分:1)

将您的呼叫线程连接到SMTP服务器。您可以使用ExecutorService(存在各种实现)并放入Runnables以便在稍后阶段(带外)执行。这种方法的优点是您不必显式编写线程模型。

如果您在提交时从Executor收集Future对象,则可以在适当的超时时调用get()并在超时时取消(并可能重新提交/重试)。