Exemple #1
0
    def handle_mail(cls):
        """
        Метод обрабатывает почтовый ящик
        """
        from applications.provider_app.service import ProviderService
        res = []
        debug(u"Начало проверки почты")
        emails = ProviderService.get_all_emails()
        debug(u"Найдено %d почтовых ящиков отправителей", len(emails))
        try:
            count = cls.get_count_new_mails(emails)
        except Exception as err:
            error(u"Произошла ошибка при обработке почты. %s" % unicode(err))
            raise MailInvoiceException(err)
        debug(u"Найдено %d новых писем", count)
        if count > 0 and emails > 0:
            ids = []
            try:
                ids, mails = MailHepls.get_mails(emails)
                for _from in mails:
                    provider = ProviderService.get_provider_by_email(_from)
                    mailss = mails[_from]
                    for mail in mailss:
                        ml = Mail(
                            title=mail.title, date=mail.date_, text=mail.text,
                            from_=mail.from_, to=mail.to_, files=mail.files)
                        ml.provider = provider
                        db.session.add(ml)
                        db.session.commit()
                        try:
                            print "PUBLIC new mail"
                            r = redis.StrictRedis(
                                host='localhost', port=6379, db=0)
                            r.publish("new mail", "")
                        except Exception as exc:
                            error(u"Не удалось подключиться к редису")

                        res.append(ml)
            except GoodArgumentExc as exc:
                mark_as_unseen(ids)
                raise MailInvoiceException(exc)
            except Exception as err:
                try:
                    mark_as_unseen(ids)
                except Exception as err:
                    error(u"Произошла ошибка при пометке писем как "
                          u"непрочитанных. %s", unicode(err))
                    raise
                error(u"Произошла ошибка при обработке почты. %s", unicode(err))
                raise MailInvoiceException(err)
        debug(u"Конец проверки почты")
        return res