2011-11-19 13 views
15

Estoy intentando usar el módulo logging de Python para enviar correos electrónicos que contengan registros. El problema que estoy teniendo es que cada vez que escribo una entrada de registro, se envía un correo electrónico. ¿Cómo hago cola en los mensajes de registro y envío un solo correo electrónico al finalizar el script?SMTPHandler en el módulo de registro de Python enviando correos electrónicos de uno en uno. ¿Cómo puedo detener esto?

Tengo la sensación de que está hecho con el método emit(), pero no sé cómo usarlo.

import logging, logging.handlers 
log = logging.getLogger("mylogger") 
log.setLevel(logging.DEBUG) 
h2 = logging.handlers.SMTPHandler(mailhost='mailserver', 
          fromaddr='[email protected]', 
          toaddrs=['[email protected]'], 
          subject='The log', 
          credentials=('user','pwd'), 
          secure=None) 
h2.setLevel(logging.INFO) 
h2.setFormatter(f) 
log.addHandler(h2) 

log.info("Did something") 
log.info("Did something else") 
log.info("This would send a third email. :-(") 

Respuesta

8

Ver this answer que he dado a una pregunta similar un manejador de ejemplo para su uso es here; se puede adaptar a sus necesidades

+0

@VinaySajip - ¿Cuáles son sus pensamientos sobre el uso del módulo de smtplib para enviar mensajes de correo electrónico en su lugar.. ? – codingknob

+0

@ algotr8der - Puede ver en el controlador de ejemplo que realmente usa 'smtplib' para enviar los correos electrónicos. –

2

Simplemente la subclase SMTPHandler para producir el comportamiento deseado. usted podría, por ejemplo, reemplazar el método emiten con el fin de enviar un correo en cada tercer mensaje registrado

Precaución: En función de la aplicación que eligió ningún correo en absoluto sería enviado si inicia la sesión sólo una o dos veces. Quizás un envío retrasado podría ser la solución: espere un segundo antes de enviar el correo. Si después de un segundo no se recibe otra línea, envíela, agregue la línea al mensaje que se va a enviar y espere otro segundo ... y así sucesivamente ... (El envío diferido debe realizarse en un hilo separado (considere usar Timer)

Cuestiones relacionadas