Fixes issue #81: get_email is too verbose.

A patch was provided by mdornseif which was the basis for this. Adding 
'-q' to the crontab line will reduce the output, making it more suitable 
for use in a cronjob.
This commit is contained in:
Ross Poulton 2009-07-21 09:54:23 +00:00
parent 36d160199e
commit 21d38604cf

View File

@ -15,9 +15,11 @@ import imaplib
import mimetypes import mimetypes
import poplib import poplib
import re import re
from datetime import datetime, timedelta from datetime import datetime, timedelta
from email.header import decode_header from email.header import decode_header
from email.Utils import parseaddr from email.Utils import parseaddr
from optparse import make_option
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
@ -29,11 +31,25 @@ from helpdesk.models import Queue, Ticket, FollowUp, Attachment, IgnoreEmail
class Command(BaseCommand): class Command(BaseCommand):
def __init__(self):
BaseCommand.__init__(self)
self.option_list += (
make_option(
'--quiet', '-q',
default=False,
action='store_true',
help='Hide details about each queue/message as they are processed'),
)
help = 'Process Jutda Helpdesk queues and process e-mails via POP3/IMAP as required, feeding them into the helpdesk.'
def handle(self, *args, **options): def handle(self, *args, **options):
process_email() quiet = options.get('quiet', False)
process_email(quiet=quiet)
def process_email(): def process_email(quiet=False):
for q in Queue.objects.filter( for q in Queue.objects.filter(
email_box_type__isnull=False, email_box_type__isnull=False,
allow_email_submission=True): allow_email_submission=True):
@ -50,14 +66,15 @@ def process_email():
if (q.email_box_last_check + queue_time_delta) > datetime.now(): if (q.email_box_last_check + queue_time_delta) > datetime.now():
continue continue
process_queue(q) process_queue(q, quiet=quiet)
q.email_box_last_check = datetime.now() q.email_box_last_check = datetime.now()
q.save() q.save()
def process_queue(q): def process_queue(q, quiet=False):
print "Processing: %s" % q if not quiet:
print "Processing: %s" % q
if q.email_box_type == 'pop3': if q.email_box_type == 'pop3':
if q.email_box_ssl: if q.email_box_ssl:
@ -78,7 +95,7 @@ def process_queue(q):
msgSize = msg.split(" ")[1] msgSize = msg.split(" ")[1]
full_message = "\n".join(server.retr(msgNum)[1]) full_message = "\n".join(server.retr(msgNum)[1])
ticket = ticket_from_message(message=full_message, queue=q) ticket = ticket_from_message(message=full_message, queue=q, quiet=quiet)
if ticket: if ticket:
server.dele(msgNum) server.dele(msgNum)
@ -102,7 +119,7 @@ def process_queue(q):
break break
for num in msgnums: for num in msgnums:
status, data = server.fetch(num, '(RFC822)') status, data = server.fetch(num, '(RFC822)')
ticket = ticket_from_message(message=data[0][1], queue=q) ticket = ticket_from_message(message=data[0][1], queue=q, quiet=quiet)
if ticket: if ticket:
server.store(num, '+FLAGS', '\\Deleted') server.store(num, '+FLAGS', '\\Deleted')
@ -124,7 +141,7 @@ def decode_mail_headers(string):
decoded = decode_header(string) decoded = decode_header(string)
return u' '.join([unicode(msg, charset or 'utf-8') for msg, charset in decoded]) return u' '.join([unicode(msg, charset or 'utf-8') for msg, charset in decoded])
def ticket_from_message(message, queue): def ticket_from_message(message, queue, quiet):
# 'message' must be an RFC822 formatted message. # 'message' must be an RFC822 formatted message.
msg = message msg = message
message = email.message_from_string(msg) message = email.message_from_string(msg)
@ -289,7 +306,8 @@ def ticket_from_message(message, queue):
) )
f.save() f.save()
print (" [%s-%s] %s%s" % (t.queue.slug, t.id, t.title, update)).encode('ascii', 'replace') if not quiet:
print (" [%s-%s] %s%s" % (t.queue.slug, t.id, t.title, update)).encode('ascii', 'replace')
for file in files: for file in files:
if file['content']: if file['content']:
@ -303,7 +321,8 @@ def ticket_from_message(message, queue):
) )
a.file.save(filename, ContentFile(file['content']), save=False) a.file.save(filename, ContentFile(file['content']), save=False)
a.save() a.save()
print " - %s" % filename if not quiet:
print " - %s" % filename
return t return t