예제 #1
0
 def __init__(self,
              fromaddr,
              toaddrs,
              mailhost='localhost',
              subject='%(line)s',
              send_empty_entries=False,
              flood_level=10,
              username=None,
              password=None,
              ignore=(),
              headers=None,
              template=None,
              charset='utf-8',
              content_type='text/plain'):
     SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject)
     self.subject_formatter = SubjectFormatter(subject)
     self.send_empty_entries = send_empty_entries
     self.flood_level = flood_level
     self.hour = self.now().hour
     self.sent = 0
     self.username = username
     self.password = password
     self.ignore = process_ignore(ignore)
     self.headers = headers or {}
     self.template = template
     self.charset = charset
     self.content_type = content_type
     if not self.mailport:
         self.mailport = smtplib.SMTP_PORT
예제 #2
0
 def __init__(self,
              fromaddr,
              toaddrs,
              mailhost='localhost',
              subject='%(line)s',
              send_empty_entries=False,
              flood_level=10,
              username=None,
              password=None,
              headers=None,
              template=None,
              charset='utf-8',
              content_type='text/plain'):
     SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject)
     self.subject_formatter = SubjectFormatter(subject)
     self.send_empty_entries = send_empty_entries
     self.flood_level = flood_level
     self.hour = self.now().hour
     self.sent = 0
     self.username = username
     self.password = password
     self.headers = headers or {}
     self.template = template
     self.charset = charset
     self.content_type = content_type
     if not self.mailport:
         self.mailport = smtplib.SMTP_PORT
예제 #3
0
 def __init__(self,
              fromaddr,
              toaddrs,
              mailhost='localhost',
              subject='%(line)s',
              send_empty_entries=False,
              flood_level=10,
              username=None,
              password=None,
              ignore=(),
              headers=None):
     SMTPHandler.__init__(self,mailhost,fromaddr,toaddrs,subject)
     self.subject_formatter = SubjectFormatter(subject)
     self.send_empty_entries = send_empty_entries
     self.flood_level = flood_level
     self.hour = now().hour
     self.sent = 0
     self.username = username
     self.password = password
     self.ignore = process_ignore(ignore)
     self.headers = headers or {}
     if not self.mailport:
         self.mailport = smtplib.SMTP_PORT
예제 #4
0
class MailingLogger(SMTPHandler):

    now = datetime.datetime.now

    def __init__(self,
                 fromaddr,
                 toaddrs,
                 mailhost='localhost',
                 subject='%(line)s',
                 send_empty_entries=False,
                 flood_level=10,
                 username=None,
                 password=None,
                 headers=None,
                 template=None,
                 charset='utf-8',
                 content_type='text/plain'):
        SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject)
        self.subject_formatter = SubjectFormatter(subject)
        self.send_empty_entries = send_empty_entries
        self.flood_level = flood_level
        self.hour = self.now().hour
        self.sent = 0
        self.username = username
        self.password = password
        self.headers = headers or {}
        self.template = template
        self.charset = charset
        self.content_type = content_type
        if not self.mailport:
            self.mailport = smtplib.SMTP_PORT

    def getSubject(self, record):
        return self.subject_formatter.format(record)

    def emit(self, record):
        msg = record.getMessage()
        if not self.send_empty_entries and not msg.strip():
            return

        current_time = self.now()
        current_hour = current_time.hour
        if current_hour != self.hour:
            self.hour = current_hour
            self.sent = 0
        if self.sent == self.flood_level:
            # send critical error
            record = LogRecord(
                name='flood',
                level=CRITICAL,
                pathname='',
                lineno=0,
                msg=flood_template % (self.sent,
                                      current_time.strftime('%H:%M:%S'),
                                      current_hour + 1),
                args=(),
                exc_info=None)
        elif self.flood_level and self.sent > self.flood_level:
            # do nothing, we've sent too many emails already
            return
        self.sent += 1

        # actually send the mail
        try:
            msg = self.format(record)
            if self.template is not None:
                msg = self.template % msg
            subtype = self.content_type.split('/')[-1]
            if isinstance(msg, unicode):
                email = MIMEText(msg, subtype, self.charset)
            else:
                email = MIMEText(msg, subtype)

            for header, value in self.headers.items():
                email[header] = value
            email['Subject'] = self.getSubject(record)
            email['From'] = self.fromaddr
            email['To'] = ', '.join(self.toaddrs)
            email['X-Mailer'] = x_mailer
            email['X-Log-Level'] = record.levelname
            email['Date'] = formatdate()
            email['Message-ID'] = make_msgid('MailingLogger')
            smtp = smtplib.SMTP(self.mailhost, self.mailport)
            if self.username and self.password:
                smtp.login(self.username, self.password)
            smtp.sendmail(self.fromaddr, self.toaddrs, email.as_string())
            smtp.quit()
        except:
            self.handleError(record)
예제 #5
0
class MailingLogger(SMTPHandler):

    now = datetime.datetime.now

    def __init__(self,
                 fromaddr,
                 toaddrs,
                 mailhost='localhost',
                 subject='%(line)s',
                 send_empty_entries=False,
                 flood_level=10,
                 username=None,
                 password=None,
                 ignore=(),
                 headers=None,
                 template=None,
                 charset='utf-8',
                 content_type='text/plain'):
        SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject)
        self.subject_formatter = SubjectFormatter(subject)
        self.send_empty_entries = send_empty_entries
        self.flood_level = flood_level
        self.hour = self.now().hour
        self.sent = 0
        self.username = username
        self.password = password
        self.ignore = process_ignore(ignore)
        self.headers = headers or {}
        self.template = template
        self.charset = charset
        self.content_type = content_type
        if not self.mailport:
            self.mailport = smtplib.SMTP_PORT

    def getSubject(self, record):
        return self.subject_formatter.format(record)

    def emit(self, record):
        msg = record.getMessage()
        if not self.send_empty_entries and not msg.strip():
            return

        for criterion in self.ignore:
            if criterion(msg):
                return

        current_time = self.now()
        current_hour = current_time.hour
        if current_hour != self.hour:
            self.hour = current_hour
            self.sent = 0
        if self.sent == self.flood_level:
            # send critical error
            record = LogRecord(name='flood',
                               level=CRITICAL,
                               pathname='',
                               lineno=0,
                               msg=flood_template %
                               (self.sent, current_time.strftime('%H:%M:%S'),
                                current_hour + 1),
                               args=(),
                               exc_info=None)
        elif self.flood_level and self.sent > self.flood_level:
            # do nothing, we've sent too many emails already
            return
        self.sent += 1

        # actually send the mail
        try:
            msg = self.format(record)
            if self.template is not None:
                msg = self.template % msg
            subtype = self.content_type.split('/')[-1]
            if isinstance(msg, unicode):
                email = MIMEText(msg, subtype, self.charset)
            else:
                email = MIMEText(msg, subtype)

            for header, value in self.headers.items():
                email[header] = value
            email['Subject'] = self.getSubject(record)
            email['From'] = self.fromaddr
            email['To'] = ', '.join(self.toaddrs)
            email['X-Mailer'] = x_mailer
            email['X-Log-Level'] = record.levelname
            email['Date'] = formatdate()
            email['Message-ID'] = make_msgid('MailingLogger')
            smtp = smtplib.SMTP(self.mailhost, self.mailport)
            if self.username and self.password:
                smtp.login(self.username, self.password)
            smtp.sendmail(self.fromaddr, self.toaddrs, email.as_string())
            smtp.quit()
        except:
            self.handleError(record)
예제 #6
0
class MailingLogger(SMTPHandler):

    def __init__(self,
                 fromaddr,
                 toaddrs,
                 mailhost='localhost',
                 subject='%(line)s',
                 send_empty_entries=False,
                 flood_level=10,
                 username=None,
                 password=None,
                 ignore=(),
                 headers=None):
        SMTPHandler.__init__(self,mailhost,fromaddr,toaddrs,subject)
        self.subject_formatter = SubjectFormatter(subject)
        self.send_empty_entries = send_empty_entries
        self.flood_level = flood_level
        self.hour = now().hour
        self.sent = 0
        self.username = username
        self.password = password
        self.ignore = process_ignore(ignore)
        self.headers = headers or {}
        if not self.mailport:
            self.mailport = smtplib.SMTP_PORT

    def getSubject(self,record):
        return self.subject_formatter.format(record)

    def emit(self,record):
        msg = record.getMessage()
        if not self.send_empty_entries and not msg.strip():
            return

        for criterion in self.ignore:
            if criterion(msg):
                return

        current_time = now()
        current_hour = current_time.hour
        if current_hour != self.hour:
            self.hour = current_hour
            self.sent = 0
        if self.sent == self.flood_level:
            # send critical error
            record = LogRecord(
                name = 'flood',
                level = CRITICAL,
                pathname = '',
                lineno = 0,
                msg = flood_template % (self.sent,
                                        current_time.strftime('%H:%M:%S'),
                                        current_hour+1),
                args = (),
                exc_info = None)
        elif self.flood_level and self.sent > self.flood_level:
            # do nothing, we've sent too many emails already
            return
        self.sent += 1

        # actually send the mail
        try:
            msg = self.format(record)
            email = MIMEText(msg)
            for header,value in self.headers.items():
                email[header]=value
            email['Subject']=self.getSubject(record)
            email['From']=self.fromaddr
            email['To']=', '.join(self.toaddrs)
            email['X-Mailer']=x_mailer
            email['Date']=formatdate()
            email['Message-ID']=make_msgid('MailingLogger')
            smtp = smtplib.SMTP(self.mailhost, self.mailport)
            if self.username and self.password:
                smtp.login(self.username,self.password)
            smtp.sendmail(self.fromaddr, self.toaddrs, email.as_string())
            smtp.quit()
        except:
            self.handleError(record)