diff options
-rw-r--r-- | servo/tasks.py | 31 | ||||
-rw-r--r-- | settings.py | 8 |
2 files changed, 38 insertions, 1 deletions
diff --git a/servo/tasks.py b/servo/tasks.py index 0bc8d00..9520db8 100644 --- a/servo/tasks.py +++ b/servo/tasks.py @@ -2,12 +2,15 @@ from __future__ import absolute_import +from email.parser import Parser + from celery import shared_task from django.conf import settings from django.core.cache import cache -from servo.models import Order, Note, Template +from servo.lib.utils import empty +from servo.models import Configuration, User, Order, Note, Template def get_rules(): @@ -137,3 +140,29 @@ def batch_process(user, data): return '%d/%d orders processed' % (processed, len(orders)) + +@shared_task +def check_mail(): + """ + Checks IMAP box for incoming mail + """ + uid = Configuration.conf('imap_act') + + if empty(uid): + raise ValueError('Incoming message user not configured') + + user = User.objects.get(pk=uid) + server = Configuration.get_imap_server() + typ, data = server.search(None, "UnSeen") + + for num in data[0].split(): + #logging.debug("** Processing message %s" % num) + typ, data = server.fetch(num, "(RFC822)") + # parsestr() seems to return an email.message? + msg = Parser().parsestr(data[0][1]) + Note.from_email(msg, user) + #server.copy(num, 'servo') + server.store(num, '+FLAGS', '\\Seen') + + server.close() + server.logout() diff --git a/settings.py b/settings.py index d1d3e95..9bc0b87 100644 --- a/settings.py +++ b/settings.py @@ -3,6 +3,7 @@ import os import re import socket +from datetime import timedelta from django.contrib.messages import constants as messages DEBUG = False @@ -224,4 +225,11 @@ GSX_KEY = 'uploads/settings/gsx_key.pem' os.environ['GSX_CERT'] = GSX_CERT os.environ['GSX_KEY'] = GSX_KEY +CELERYBEAT_SCHEDULE = { + 'check_mail': { + 'task': 'servo.tasks.check_mail', + 'schedule': timedelta(seconds=300), + }, +} + from local_settings import * |