aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--servo/tasks.py31
-rw-r--r--settings.py8
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 *