# coding=utf-8 from __future__ import unicode_literals import datetime import smtplib from django.db import models from django.core.mail import EmailMessage, send_mail from lms.settings import DEFAULT_FROM_EMAIL, TESTING, TEST_EMAIL, NAME, DOMAIN, SUPPORT, SUPPORT_PHONE from redactor.fields import RedactorField from lms.tools import random_string, str_shielding def mail_access_token(): pass class MailTemplate(models.Model): key = models.CharField(verbose_name=u'Ключ шаблона', max_length=255, editable=False, blank=True) title = models.CharField(verbose_name=u'Название шаблона', max_length=255) text = models.TextField(verbose_name=u'Шаблон', default='', help_text='{TEXT} - Текст самого письма ' '{DOMAIN} - Домен отправителя' '{NAME} - Название компании,' '{SUPPORT} - Почта поддержки,' '{SUPPORT_PHONE} - Телефон поддержки') def __unicode__(self): return u'%s' % self.title def __str__(self): return '%s' % self.title def save(self, *args, **kwargs): if not self.key: self.key = random_string() super(MailTemplate, self).save(*args, **kwargs) class Meta: verbose_name = u'Шаблон письма' verbose_name_plural = u'Шаблоны писем' class MailBox(models.Model): MAIL_STATUS = ( ('Q', 'На очереди'), ('W', 'Ожидает даты доставки'), ('S', 'Отправлен'), ('E', 'Ошибка отправки'), ('D', 'Доставлен'), ('F', 'Адресат не найден') ) #token = models.CharField(verbose_name=u'Токен', max_length=255, default=mail_access_token, unique=True) status = models.CharField(verbose_name=u'Статус письма', choices=MAIL_STATUS, default='Q', max_length=1) custom = models.BooleanField(verbose_name=u'Кастомная обложка', default=False) _to = models.EmailField(verbose_name=u'Почта') queue_date = models.DateTimeField(verbose_name=u'Дата постановки задачи', default=datetime.datetime.now, help_text=u'Если указать дату доставки, письмо будет ожидать времени своего ' u'отправления') error = models.CharField(verbose_name=u'Ошибка отправки', blank=True, default='', max_length=255) sent_date = models.DateTimeField(verbose_name=u'Время отправки', blank=True, null=True, editable=False) title = models.CharField(verbose_name=u'Заголовок письма', max_length=255) text = models.TextField(verbose_name=u'Текст отправки', editable=False) result = RedactorField(verbose_name=u'Вид письма', blank=True, default='') _type = models.CharField(verbose_name=u'Тип письма', max_length=255, blank=True, default='') template = models.CharField(verbose_name=u'Ключ шаблона письма', max_length=100, blank=True, default='') def __unicode__(self): return u'%s %s' % (self._to, self.get_status_display()) def __str__(self): return '%s %s' % (self._to, self.get_status_display()) def send_letter(self): if not self.custom: msg = EmailMessage(self.title, self.result, u'{1} <{0}>'.format(DEFAULT_FROM_EMAIL, NAME), [self._to if not TESTING else TEST_EMAIL]) msg.content_subtype = "html" try: msg.send() except smtplib.SMTPDataError as e: self.status = 'E' self.error = e else: self.sent_date = datetime.datetime.now() self.status = 'S' else: try: send_mail( self.title, '', u'{1} <{0}>'.format(DEFAULT_FROM_EMAIL, NAME), [self._to], fail_silently=True, html_message=self.result ) except smtplib.SMTPDataError as e: self.status = 'E' self.error = e else: self.sent_date = datetime.datetime.now() self.status = 'S' self.save() def save(self, *args, **kwargs): if not self.result: template = u'' \ u'' \ u'
' \ u'' \ u'| С уважением, {NAME} |
![]() |
| Пожалуйста, по любым вопросам смело пишите на {SUPPORT} |