gpt4 book ai didi

java - 如何在 EE6 中正确地做 JavaMail?

转载 作者:行者123 更新时间:2023-12-04 05:32:24 24 4
gpt4 key购买 nike

我想知道其他人如何处理他们的邮件以及您对最佳实践有何看法。当我考虑如何完成邮寄的事情时,我只能想到一种可以通过不同技术以不同方式实现的解决方案。

  • 以某种方式使邮件持久化(保存在数据库中,通过 JMS 发送)
  • 不断检查(使用调度器从数据库中或通过 JMS 获取)尚未成功发送的新邮件并尝试发送,当发生错误时,稍后再试

  • 希望没有一个很好的理由没有人使用的另一种选择是在业务逻辑中发送邮件,并可能导致事务失败(或在特定时间重试发送邮件时需要很长时间),因为邮件无法发送。

    在另一个项目中,我看到了一个独立的邮件发件人应用程序,它不断查询数据库并根据当前时间等条件发送电子邮件。

    那么您认为什么是好的解决方案,或者您在项目中实际使用了什么?我无法通过谷歌找到任何现实世界的例子,也许我搜索得不够,但如果是这样,请与我分享你的资源!

    编辑
    要定义“正确的方式”,我想添加一些要求:
  • 邮件必须是持久的、可编辑的、可重新发送的
  • 根据某些标准,可以在特定时间发送邮件
  • 解决方案应该水平缩放

  • EE6 为 EJB 提供 TimerService 和异步操作。通过为 EE6 环境寻求“正确的方式”,我想知道对于此类标准要求应该如何使用/实现邮件。

    oracle 站点上有一些文章显示了@Async EJB 方法中邮件 session 的用法,但这种用法听起来有些错误。我应该使用计时器服务来重试发送邮件吗?我应该将邮件保存到数据库并使用间隔计时器来获取并尝试发送它们吗?我应该将邮件的发送移到应用程序之外吗?

    我想知道其他人使用哪些解决方案,并听取有关对于此类(希望不仅对我而言)常见需求的更好或更差解决方案的意见。

    最佳答案

    在我们的项目中,我们使用 Quartz 调度程序来运行作业。在作业被安排发送电子邮件之前,消息是组成的,电子邮件的不同部分(如主题、正文、收件人)存储在数据库中。
    当quartz 作业运行并且能够成功发送电子邮件时,消息的sent_flg 将设置为SENT。
    如果失败,quartz 作业将在一段时间后以相同的参数再次运行。
    在它放弃之前,它会尝试几次。
    还有一个屏幕,管理员可以在其中重新发送失败的消息,以防他想发送它。

    关于java - 如何在 EE6 中正确地做 JavaMail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12406889/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com