2008-09-18 13 views
13

Nuestro servidor CF ocasionalmente detiene el procesamiento del correo. Esto es problemático, ya que muchos de nuestros clientes dependen de él.La cola de correo de ColdFusion detiene el procesamiento

Encontramos sugerencias en línea que mencionan archivos de cero bytes en la carpeta que no se pueden entregar, por lo que creé una tarea que los elimina cada tres minutos. Sin embargo, la detención ha ocurrido nuevamente.

Estoy buscando sugerencias para diagnosticar y solucionar este problema.

  • CF 8 estándar
  • Win2k3

Agregado:

  • No hay errores en el registro electrónico en el momento de la cola no
  • No hemos probado para funcionar esto sin usar la cola, debido a la gran cantidad de correo que enviamos

Agregado 2:

  • No parece ser un problema con cualquiera de los archivos en la carpeta de cola. Cuando reiniciamos la cola de correo, todos parecen procesarse correctamente.

Agregado 3:

  • No estamos utilizando archivos adjuntos.

Respuesta

13

Lo que terminamos haciendo:

escribí dos tareas programadas. El primero se comprobó para ver si había algún mensaje en la carpeta de cola anterior a n minues (actualmente establecido en 30). El segundo restablece la cola todas las noches durante el uso bajo.

Lamentablemente, nunca descubrimos por qué la cola se saldría de los rieles, pero parece que solo sucede cuando usamos Exchange, otros servidores de correo electrónico que hemos probado no tienen este problema.

Editar: me pidieron para publicar mi código, así que aquí tiene el reiniciar cuando se encuentra electrónico antigua:

<cfdirectory action="list" directory="c:\coldfusion8\mail\spool\" name="spool" sort="datelastmodified"> 
<cfset restart = 0> 
<cfif datediff('n', spool.datelastmodified, now()) gt 30> 
    <cfset restart = 1> 
</cfif> 
<cfif restart> 
    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")> 
    <cfset MailSpoolService = sFactory.mailSpoolService> 
    <cfset MailSpoolService.stop()> 
    <cfset MailSpoolService.start()> 
</cfif> 
+0

que solía tener esto suceda periódicamente, y como el raro "<". problema, nunca identificamos la causa ... podríamos enviar 100 correos idénticos, y el 35 se ahogaría ... eliminando el más antiguo que se haya fijado universalmente ...configurar un programa para monitorear es una buena solución para esos extraños errores jrun sin registro. – OhkaBaka

+0

Hemos tenido el mismo problema, pero detener e iniciar MailSpoolService como se describe aquí no tiene ningún efecto sobre el problema; todo lo que funciona para nosotros es reiniciar Coldfusion. ¿Alguien tiene alguna otra sugerencia que podamos intentar que nos impida reiniciar Coldfusion? – Loftx

+0

@Loftx - ¿Qué servidor de correo electrónico estás usando? Solo experimentamos este problema cuando los poderes que nos obligan a usar Exchange. ¿Sería posible usar un pequeño sistema de retransmisión SMTP? La versión gratuita de MailEnable funciona muy bien para esto en nuestro entorno de producción. –

3

¿Ha intentado simplemente omitir la cola por completo? (En CF Admin, en Opciones de Spool Mail, desmarque "Cola de mensajes de correo para entrega.")

3

A veces tengo el mismo problema y no es debido a un archivo de cero bytes, aunque ese problema surgió en el pasado . Parece que uno o dos archivos (los más antiguos de la carpeta) evitarán que se procese la cola. Lo que hago es mover todos los mensajes a una carpeta de espera, reiniciar la cola de correo y copiar los mensajes en un trozo a la vez en orden cronológico inverso, esperar a que salgan y avanzar un poco más. Los mensajes que estaban reteniendo la cola se colocan en una carpeta separada para ser examinados posteriormente.

Probablemente puede hacer esto mediante programación en stopping the queue, moviendo el archivo más antiguo a otra carpeta, luego start the mail queue y vea si el envío comienza con éxito al verificar los conteos y fechas de archivos de la carpeta. Si no funciona eliminar el archivo más antiguo, repita el proceso anterior hasta que todos los archivos de correo ofensivos se muevan y el envío continúe con éxito.

Espero que las ayudas.

0

Hubo/hubo un problema con la cola de correo y los mensajes con datos adjuntos en CFMX 8 que se corrigieron con una de las Revisiones. La versión 8.0.1, al menos, debería haber tenido eso arreglado.

5

We have not tried to run this without using the queue, due to the large amount of mail we send

pesar de todo, tiene que intentado apagar la cola de impresión? He visto enviar correos a una velocidad de 500-600 mensajes en medio segundo, y eso es como un servidor horrible.Con el tiempo de espera de la página estándar en 60 segundos, eso sería ~ 72,000 correos electrónicos que podría enviar antes de que la página caduque. ¿Estás enviando más de 72,000 a la vez?

Una alternativa que utilicé antes de CFMail fue tan rápido como crear una cola de impresión personalizada. En lugar de enviar los correos electrónicos sobre la marcha, guárdelos en una tabla de base de datos. A continuación, configure un trabajo programado para enviar unos pocos cientos de mensajes y reprogramarse durante unos minutos más tarde, hasta que la tabla esté vacía.

Programamos el trabajo para que se ejecutara una vez al día; y puede reprogramarse para ejecutarse nuevamente en un par de minutos si la tabla no está vacía. Nunca tuve un problema con eso.

2

tenemos en realidad una configuración idéntica, de 32 bits en CF8 Win2K3.

Empleamos la solución de Ben hace aproximadamente un año, y eso cierto ha ayudado a volver a colatar automáticamente los correos electrónicos que se atascan.

Sin embargo, recientemente, sin ninguna razón en particular, uno de nuestros 7 servidores web decidió entrar en este estado con cada intento de correo electrónico.

An exception occurred when setting up mail server parameters. This exception was caused by: coldfusion.mail.MailSessionException: An exception occurred when setting up mail server parameters..

Cada uno de nuestros servidores web son clones idénticos el uno del otro, por lo que por lo que sólo le estaba sucediendo a que uno es extraña.

Otro elemento a tener en cuenta es que teníamos una secuencia de comandos que reinicia la máquina en el medio de la noche debido a problemas de administración de memoria de JRUN. El acto de reiniciar pareció iniciar el problema. Un reinicio posterior del servicio de CF lo borrará, y la máquina estaría bien hasta que se reinicie de nuevo.

Encontramos que el problema está relacionado con el escáner de virus McAfee, después de actualizarlo para excluir el directorio c: \ ColdFusion8, el problema desapareció.

Espero que ayude.

0

Hay un error en el código de Ben Doom. Gracias de todos modos ben, el código es excelente y lo usamos ahora en uno de nuestros servidores con CF8 instalado, pero: si el directorio (\ spool) está vacío, el código falla (error: valor de fecha pasado a la función de fecha DateDiff es no especificado o no válido.) Esto se debe a que si el objeto de consulta spool está vacío (spool.recordcount EQ 0), la función datediff produce un error.

Utilizamos este momento:

<!--- check if request for this page is local to prevent "webusers" to request this page over and over, only localhost (server) can get it e.g. by cf scheduled tasks---> 
<cfsetting requesttimeout="30000"> 
<cfset who = CGI.SERVER_NAME> 
<cfif find("localhost",who) LT 1> 
    security restriction, access denied. 
    <cfabort> 
</cfif> 

<!--- get spool directory info ---> 
<cfdirectory action="list" directory="C:\JRun4\servers\cfusion\cfusion-ear\cfusion-war\WEB-INF\cfusion\Mail\Spool\" name="spool" sort="datelastmodified"> 
<cfset restart = 0> 
<cfif spool.recordcount GT 0><!--- content there? ---> 
    <cfif datediff('n', spool.datelastmodified, now()) gt 120> 
     <cfset restart = 1> 
    </cfif> 
</cfif> 
<cfif restart><!--- restart ---> 
    <cfsavecontent variable="liste"> 
     <cfdump var="#list#"> 
    </cfsavecontent>  
    <!--- info ---> 
    <cfmail to="[email protected]" subject="cfmailqueue restarted by daemon" server="xxx" port="25" from="xxxx" username="xxxx" password="xxx" replyto="xxxx"> 
    1/2 action: ...try to restart. Send another mail if succeeded! 
    #now()# 

    Mails: 
    #liste# 
    </cfmail> 

    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")> 
    <cfset MailSpoolService = sFactory.mailSpoolService> 
    <cfset MailSpoolService.stop()> 
    <cfset MailSpoolService.start()> 

    <!--- info ---> 
    <cfmail to="[email protected]" subject="cfmailqueue restarted by daemon" server="xxx" port="25" from="xxxx" username="xxxx" password="xxx" replyto="xxxx"> 
    2/2 action: ...succeeded! 
    #now()# 
    </cfmail> 

</cfif> 
Cuestiones relacionadas