热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–使用apachecommonsmail重新发送MultiPartEmail

这是我的情景:>使用邮件构造所需的一堆参数调用一些电子邮件发送bean.>它创建MultiPartEmail并将其排队等待发送,这是由后台的单独线程完成的,

这是我的情景:

>使用邮件构造所需的一堆参数调用一些电子邮件发送bean.
>它创建MultiPartEmail并将其排队等待发送,这是由后台的单独线程完成的,调用者不关心它是否已发送.
>传递线程获取排队的电子邮件实例并执行email.send() – 所以关闭它.
>当交付失败时,bean将尝试每5分钟重新发送邮件三次,然后放弃.

题:

我无法弄清楚如何处理#4.我手头上已经构建的MultiPartEmail实例无法发送.显然,再次执行email.send()会抛出这个:

java.lang.IllegalStateException:MimeMessage已经构建.

有没有办法重置这种非法状态,以便可以重复使用该消息.我真的没有从头开始创建新实例的方法 – 调用者早已不复存在,并且它将使整个机制变得非常丑陋,而无法使用已经构建的对象.我想我在这里错过了很简单的东西..

解决方法:

我看到这是一个老问题,但我遇到了同样的问题,我找到了解决方案.

当您创建MultiPartEmail(或HtmlEmail)的实例,设置其属性,然后调用send()方法时,该对象将在内部调用以下方法:

> buildMimeMessage()
> sendMimeMessage()

可以多次调用sendMimeMessage(),例如send-with-retry场景.问题是buildMimeMessage()只能被调用一次.当您依赖基本Email类的send()方法时,您将获得原始海报所发现的异常.

解决方案是使用我刚才提到的两种方法,当您的Email对象是MultiPartEmail时.您显式调用buildMimeMessage()一次,然后调用sendMimeMessage()一次或多次.


推荐阅读
author-avatar
--AppleChan--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有