【问题标题】:ColdFusion Try Catch on loop through mail functionColdFusion Try Catch on loop 通过邮件功能
【发布时间】:2014-01-30 19:11:07
【问题描述】:

我有一个电子邮件发送到的电子邮件地址列表。邮件函数循环遍历数据库中的列表,但如果遇到格式错误的电子邮件地址,它会停止并跳出循环。我尝试使用 try/catch 来捕获错误,并希望它能够继续循环,但它并没有像我希望的那样工作。代码如下。如果有人有任何想法,或者我可以在循环之前筛选电子邮件地址以过滤掉坏人的正则表达式,那就太棒了。

谢谢。

    <!---Try to send the mail(s)--->
<cftry>
    <cfmail to="<#Auctioneer.email#>" from="#emailSite#" subject="#Email.subject#" server="#emailServer#" query="Auctioneer" type="html">
        <!---Some email content--->
    </cfmail>

    <cfcatch type="Application">
        <cflog text="#cfcatch.detail#" file="mail" type="Error" application="yes">
        <cfmail to="admin@website.co.uk" from="#emailSite#" subject="Invalid E-Mail Address" type="html">
            Email address not valid error.
            #Auctioneer.email#
            <cfdump var="#cfcatch.detail#">
        </cfmail>
    </cfcatch>
</cftry>

【问题讨论】:

    标签: coldfusion railo cfmail


    【解决方案1】:

    您想要的是遍历地址,验证它们并仅为有效条目发送邮件。像这样的

    <cfloop query="getEmails">
        <cfif isValid("email", Auctioneer.email)
        ...send valid email...
        <cfelse>
        ...send invalid email, or better log in database...
        </cfif>
    </cfloop>
    

    附:无需将&lt;&gt; 放入to

    【讨论】:

    • 不过,请小心。 isValid("email",...) 似乎可以拒绝一些有效的电子邮件地址。
    【解决方案2】:

    您可以先尝试验证查询中的电子邮件地址。

    不过,对我来说,我从不喜欢让 CFMAIL 标记管理查询。它似乎总是造成比它的价值更多的麻烦。我通常会这样做:

    <cfoutput query="Auctioneer">
      <cftry>
        <cfmail to="#email#" from="#variables.emailSite#" subject="#variables.subject#" server="#application.emailServer#" type="html">
          <!---Some email content--->
        </cfmail>
    
        <cfcatch type="Application">
            <cflog text="#cfcatch.detail#" file="mail" type="Error" application="yes">
            <cfmail to="admin@website.co.uk" from="#variables.emailSite#" subject="Invalid E-Mail Address" type="html">
                Email address not valid error.
                #email#
                <cfdump var="#cfcatch.detail#">
            </cfmail>
        </cfcatch>
      </cftry>
    </cfoutput>
    

    【讨论】:

      【解决方案3】:

      我会亲自遍历它们,捕捉错误并继续循环。

      for(var i = 1; i < Auctioneer.recordCount; i++) {
          try {
              //send email
          } catch (Any e) {
              //log
              continue;
          }
      }
      

      【讨论】:

      • 这可能只是为了清楚起见,但从技术上讲,不需要continue,因为 `try/catch' 在循环中。
      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多