【问题标题】:Coldfusion cfmail with callback function带有回调函数的 Coldfusion cfmail
【发布时间】:2015-08-11 05:15:09
【问题描述】:

我正在使用 cfmail 标签向用户发送电子邮件。我需要完成的另一件事是在将记录发送给用户后删除它们。是否有任何解决方案可用于观察 cfmail 任务是否完成。例如像一个回调来表明任务已经完成。

【问题讨论】:

  • 我不确定我是否理解您要删除的内容。您是否正在循环查询电子邮件数据?
  • 是的,我正在循环查询电子邮件数据。之后我要删除的是发送电子邮件的计划数据。
  • 要验证邮件是否已发送,您可以阅读您的邮件发送日志。

标签: coldfusion callback cfmail


【解决方案1】:

对于电子邮件,无法保证电子邮件已送达。

如果 cfmail 标记执行没有错误,则在 cfml spool 目录中会有一条记录。在服务器将邮件交给您的 SMTP 服务器后,coldfusion 会从假脱机目录中删除电子邮件。

注意:如果您的服务器速度很快,您将永远不会在假脱机文件夹中看到邮件。

您可以尝试构建一个检查邮件日志的解决方案,但即使这样也不能保证电子邮件已送达。

在大多数情况下,知道执行 cfmail 就足够了。

【讨论】:

    【解决方案2】:
    <cfquery name="emailStuff">
        SELECT * FROM mytable
    </cfquery>
    
    <cfloop query="emailStuff">
        <cfmail>
            cfmail contents/properties
        </cfmail>
        <cfquery>
            DELETE FROM mytable WHERE ID=emailStuff.ID
        </cfquery>
    </cfloop>
    

    不确定以上是否是您要查找的内容。但这是一些代码的粗略示例,它会在邮件发送后删除您的数据库条目。

    cfmail 还具有failtodebug 的属性。

    如果电子邮件失败,它会将失败电子邮件发送给您在failto 中指定的任何人,或者您可以使用debug 记录失败的电子邮件。

    见:cfmail docs

    更新:您还可以将删除查询移到循环之外,以便它只需从数据库中快速删除即可。

    <cfloop query="emailStuff">
        <cfmail>
            cfmail contents/properties
        </cfmail>        
    </cfloop>
    <cfquery>
        DELETE FROM mytable 
        WHERE ID IN (<cfqueryparam list="yes" value="#emailStuff.ID#" />)
    </cfquery>
    

    【讨论】:

    • 非常感谢。我会试一试的。
    • 寻找一种只运行一个删除查询而不是循环运行的方法。
    • 我不得不使用 cflock 和超时来控制竞争条件的发生。已解决,谢谢大家。
    猜你喜欢
    • 2012-11-09
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多