2015-08-11 3 views
0

Я использую тэг cfmail для отправки электронной почты пользователю. Дополнительная вещь, которую мне нужно выполнить, - удалить записи после отправки их пользователям. Есть ли какое-либо решение для наблюдения за задачей cfmail, является ли оно завершено или нет. Например, как обратный вызов, чтобы указать, что задача выполнена.Coldfusion cfmail с функцией обратного вызова

+0

Я не уверен, что понимаю, что вы пытаетесь удалить. Вы зацикливаете запрос на данные электронной почты? – TomDillinger

+0

Да, я перебираю запрос на данные электронной почты. Я пытаюсь удалить после этого данные расписания для отправки электронных писем. – zawhtut

+0

Чтобы проверить отправку почты, вы можете прочитать свой журнал рассылки. –

ответ

1

С электронными письмами нет гарантий, что письмо было доставлено.

Если тег cfmail, выполненный без ошибок, будет содержать запись в каталоге cfml spool. После того, как сервер отправит почту на ваш SMTP-сервер, coldfusion удалит письмо из каталога спула.

ПРИМЕЧАНИЕ. Если ваш сервер работает быстро, вы никогда не увидите почту в папке спула.

Вы можете попытаться создать решение, которое проверяет почтовые журналы, но даже это не дает вам гарантии, что письмо было доставлено.

В большинстве случаев знание того, что выполнено cfmail, достаточно.

1
<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 имеет свойства для failto и debug.

Если электронное письмо не удалось, он отправит сообщение об ошибке кому бы то ни было, указанному в failto, или вы можете использовать debug для регистрации несостоявшихся сообщений электронной почты.

см: cfmail docs

UPDATE: Вы можете также переместить запрос на удаление наружу петли так, что она нужна только для удаления из базы данных в одном быстром движении.

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

Большое спасибо. Я дам ему попробовать. – zawhtut

+0

Ищите способ запускать только один запрос на удаление вместо того, чтобы иметь его в цикле. –

+0

Мне пришлось использовать cflock с таймаутом, чтобы контролировать состояние гонки. Он был решен и благодарит всех. – zawhtut