Class CumulativeSender
is sending email at the end of aplication. I read about problems with garbage collector and __del__
and I would like to know if there is case when __del__
for staticCumulativeSenderObject
will not be called at the end of application and why?
CumulativeSender.py:
import smtplib;
_staticCumulativeSenderObject = None;
class CumulativeSender(object):
def __init__(self):
recipients['sender'] = 'from@domain.com';
recipients['emails'] = ['to@domain.com'];
recipients['subject'] = 'Test Email';
recipients['smtp_host'] = 'localhost';
self.message = "";
self.fromaddr = recipients['sender'];
self.toaddrs = recipients['emails'];
self.subject = recipients['subject'];
self.server = smtplib.SMTP(recipients['smtp_host']);
def __del__(self):
if(self.message):
msg = ("From: %s\r\nTo: %s\r\n" % (self.fromaddr, ", ".join(self.toaddrs))) + "Subject: " + self.subject + "\r\n\r\n" + self.message;
self.server.sendmail(self.fromaddr, self.toaddrs, msg);
self.server.quit();
def immediateSend():
global _staticCumulativeSenderObject;
if(_staticCumulativeSenderObject is not None):
toDelete = _staticCumulativeSenderObject;
_staticCumulativeSenderObject = None;
del toDelete;
immediateSend = staticmethod(immediateSend);
def addEvent(msg):
global _staticCumulativeSenderObject;
if(_staticCumulativeSenderObject is None):
_staticCumulativeSenderObject = CumulativeSender();
_staticCumulativeSenderObject.message += msg + "\r\n";
addEvent = staticmethod(addEvent);
def addAlert(msg, code = None):
CumulativeSender.addEvent(buildMessage("Allert",msg,code));
addAlert = staticmethod(addAlert);
def addError(msg, code = None):
CumulativeSender.addEvent(buildMessage("Error",msg,code));
addError = staticmethod(addError);
simple use:
import CumulativeSender;
CumulativeSender.CumulativeSender.addAlert("alert1", 345);
CumulativeSender.CumulativeSender.addAlert("alert2", 346);
Or maybe there is another way to do what I want?