这是我的场景:
- 一些电子邮件发送 bean 被调用,并带有邮件构建所需的一堆参数。
- 它创建 MultiPartEmail 并将其排队等待发送,这是由后台的单独线程完成的,调用者不关心它是否已发送。
- 发送线程拾取排队的电子邮件实例并执行 email.send() - 这样就可以了。
- 当发送失败时,bean 将尝试每 5 分钟重新发送邮件 3 次,然后放弃。
问题:
我不知道如何处理#4。我手头的是之前构建的 MultiPartEmail 实例,但发送失败。显然再次执行 email.send() 会抛出此错误:
java.lang.IllegalStateException:MimeMessage 已构建。
有没有办法重置这种非法状态,以便可以重新使用消息。我真的没有从头开始创建新实例的方法 - 调用者早已消失,这将使整个机制变得相当丑陋,而无法使用已经构建的对象。我想我在这里错过了一些非常简单的东西..
我发现这是一个老问题,但我刚刚遇到了同样的问题,并且找到了解决方案。
当您创建一个实例时MultiPartEmail
(or HtmlEmail
),设置其属性,然后调用send()
方法,该对象将在内部调用以下方法:
- 构建MimeMessage()
- 发送MimeMessage()
调用就可以了sendMimeMessage()
多次,例如发送重试场景。问题是buildMimeMessage()
只能调用一次。当你依赖于send()
基础方法Email
类,您会得到原始海报发现的异常。
解决办法就是使用我刚才提到的两种方法Email
对象是一个MultiPartEmail
。您显式调用buildMimeMessage()
一次,然后调用sendMimeMessage()
一次或多次。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)