ColdFusion Try Catch в цикле через функцию почты

У меня есть список адресов электронной почты, на которые отправляется электронное письмо. Почтовая функция просматривает список из базы данных, но если она встречает неправильно сформированный адрес электронной почты, она останавливается и выходит из цикла. Я пытался использовать 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="[email protected]" from="#emailSite#" subject="Invalid E-Mail Address" type="html">
            Email address not valid error.
            #Auctioneer.email#
            <cfdump var="#cfcatch.detail#">
        </cfmail>
    </cfcatch>
</cftry>

person i-CONICA    schedule 26.11.2011    source источник


Ответы (3)


Что вы хотите, так это перебирать адреса, проверять их и отправлять письма только для действительных записей. Что-то вроде этого

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

P.S. Не нужно ставить <> в to.

person Sergey Galashyn    schedule 26.11.2011
comment
Будьте осторожны, однако. Похоже, что isValid("email",...) может отклонять некоторые действительные адреса электронной почты. - person ale; 27.11.2011

Вы можете сначала попробовать проверить адреса электронной почты в запросе.

Однако мне никогда не нравилось, что тег 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="[email protected]" from="#variables.emailSite#" subject="Invalid E-Mail Address" type="html">
            Email address not valid error.
            #email#
            <cfdump var="#cfcatch.detail#">
        </cfmail>
    </cfcatch>
  </cftry>
</cfoutput>
person ale    schedule 26.11.2011

Я бы лично перебрал их, поймал ошибку и продолжил цикл.

for(var i = 1; i < Auctioneer.recordCount; i++) {
    try {
        //send email
    } catch (Any e) {
        //log
        continue;
    }
}
person James Hull    schedule 28.11.2011
comment
Вероятно, это просто для ясности, но технически нет необходимости в continue, так как `try/catch' находится внутри цикла. - person Leigh; 29.11.2011