这是我的方案:
问题:
我无法弄清楚如何处理#4。我手头上已经构建的MultiPartEmail实例无法发送。显然,再次执行email.send()会抛出这个:
java.lang.IllegalStateException:已构建MimeMessage。
是否有办法重置此非法状态,以便可以重复使用该消息。我真的没有从头开始创建新实例的方法 - 调用者早已不复存在,并且它将使整个机制变得非常丑陋,而无法使用已经构建的对象。我想我在这里错过了一些非常简单的东西......
答案 0 :(得分:6)
我认为这是一个老问题,但我遇到了同样的问题,我找到了解决方案。
当您创建MultiPartEmail
(或HtmlEmail
)的实例,设置其属性,然后调用send()
方法时,该对象将在内部调用以下方法:
可以多次调用sendMimeMessage()
,例如send-with-retry场景。问题是buildMimeMessage()
只能被调用一次。当您依赖基础send()
类的Email
方法时,您将获得原始海报找到的例外。
解决方案是在Email
对象为MultiPartEmail
时使用我刚才提到的两种方法。您明确调用buildMimeMessage()
一次,然后调用sendMimeMessage()
一次或多次。