Pregunta

Nuestro servidor CF ocasionalmente deja de procesar el correo.Esto es problemático, ya que muchos de nuestros clientes dependen de ello.

Encontramos sugerencias en línea que mencionan archivos de cero bytes en la carpeta que no se puede entregar, así que creé una tarea que los elimina cada tres minutos.Sin embargo, el paro se ha vuelto a producir.

Estoy buscando sugerencias para diagnosticar y solucionar este problema.

  • Estándar CF 8
  • win2k3

Agregado:

  • No hay errores en el registro de correo en el momento en que falla la cola
  • No hemos intentado ejecutar esto sin usar la cola, debido a la gran cantidad de correo que enviamos.

Añadido 2:

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

Añadido 3:

  • No utilizamos archivos adjuntos.
¿Fue útil?

Solución

Lo que terminamos haciendo:

Escribí dos tareas programadas.El primero verificó si había algún mensaje en la carpeta de cola anterior a norte minutos (actualmente fijado en 30).El segundo restablece la cola todas las noches durante el uso bajo.

Desafortunadamente, nunca descubrimos realmente por qué la cola se descarrilaba, pero parece que solo sucede cuando usamos Exchange; otros servidores de correo que hemos probado no tienen este problema.

Editar: Me pidieron que publicara mi código, así que aquí está el que debe reiniciar cuando se encuentre correo antiguo:

<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>

Otros consejos

No hemos intentado ejecutar esto sin usar la cola, debido a la gran cantidad de correo que enviamos.

De todos modos, ¿tienes intentó ¿Apagar el spooling?He visto correo enviado a una velocidad de 500 a 600 mensajes en medio segundo, y eso en un servidor bastante malo.Con el tiempo de espera estándar de la página de 60 segundos, serían aproximadamente 72 000 correos electrónicos que podría enviar antes de que se agote el tiempo de espera de la página.¿Está enviando más de 72.000 a la vez?

Una alternativa que usé antes de CFMail era tan rápida 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.Luego configure un trabajo programado para enviar unos cientos de mensajes y reprogramarlo 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 mesa no está vacía.Nunca tuve un problema con eso.

¿Has intentado simplemente saltarte la cola por completo?(En CF Admin, en la configuración de Mail Spool, desmarque "Mensajes de correo en cola para entrega").

A veces tengo el mismo problema y no se debe 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) impedirán que la cola se procese.Lo que hago es mover todos los mensajes a una carpeta de almacenamiento, reiniciar la cola de correo y copiar los mensajes en fragmentos a la vez en orden cronológico inverso, esperar a que salgan y moverlos un poco más.Los mensajes que estaban retrasando la cola se colocan en una carpeta separada para ser examinados posteriormente.

Probablemente puedas hacer esto mediante programación detener la cola, moviendo el archivo más antiguo a otra carpeta, luego iniciar la cola de correo y compruebe si el envío comienza correctamente comprobando el número y las fechas de los archivos de la carpeta.Si eliminar el archivo más antiguo no funciona, repita el proceso anterior hasta que se muevan todos los archivos de correo infractores y el envío continúe correctamente.

Espero que les ayude.

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

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

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

Se produjo una excepción al configurar los parámetros del servidor de correo.Esta excepción fue causada por:coldfusion.mail.MailSessionException:Se produjo una excepción al configurar los parámetros del servidor de correo.

Cada uno de nuestros servidores web son clones idénticos entre sí, por lo que es extraño que solo le haya sucedido a ese.

Otro elemento a tener en cuenta es que teníamos un script que reiniciaba la máquina en 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 CF lo borraría y la máquina estaría bien hasta que se reiniciara nuevamente.

Descubrimos 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.

Hay/hubo un problema con la cola de correo y los mensajes con archivos adjuntos en CFMX 8 que se solucionó con una de las revisiones.La versión 8.0.1, al menos, debería haber solucionado eso.

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

Usamos esto ahora:

<!--- 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="x@y.com" 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="x@y.com" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    2/2 action: ...succeeded!
    #now()#
    </cfmail>

</cfif>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top