From 052f2a44c8b1d809060c1d9501d31f71e8ef79e8 Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Mon, 26 Oct 2015 15:50:32 +0200 Subject: Added check_mail task --- servo/tasks.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'servo/tasks.py') 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() -- cgit v1.2.3