@xakslim

Почему не приходят письма на почту?

Всем привет! Пытаюсь отправить письмо клиенту с вложением(может быть любым), которое загружает админ в админке. Пробую отправить письмо с pdf - получаю статус 200 и сообщение, что все успешно. Однако письмо совсем не приходит на почту, провал и гугл и яндекс почты. Подскажите в чем может быть ошибка?

models.py:
class LicenseMailConfig(SingletonModel):
    """Тексты письма для лицензий """
    title = models.CharField(_('Заголовок'), max_length=255, blank=True, null=True)
    first_body = models.TextField(_('Первый абзац'), blank=True, null=True)
    second_body = models.TextField(_('Второй абзац'), blank=True, null=True)
    promo_text = models.CharField(_('Промотекст'), max_length=255, blank=True, null=True)
    btn_text = models.CharField(_('Текст кнопки'), max_length=100, blank=True, null=True)
    btn_link = models.CharField(_('Ссылка кнопки'), max_length=255, blank=True, null=True)
    employer_title = models.CharField(_('ФИО'), max_length=255, blank=True, null=True )
    first_file = models.FileField(_('Первый файл'), max_length=255, blank=True, null=True, upload_to='config')
    class Meta:
        verbose_name = _('Тексты письма для лицензий')

    def __str__(self):
        return str(_('Тексты письма для лицензий'))

views.py:
class LicenseFormRequestView(BaseView):
    """Обработчик формы заявки лицензий"""
    form_class = forms.LicenseForm
    success_message = _('Ваш запрос благополучно отправлен')

    def post_save(self, request, obj):
        for k, v in request.POST.items():
            if not k.startswith('attach_'):
                continue

            path = v.replace(settings.MEDIA_URL, '')
            obj.attach_file(path)

    def post(self, request, **kwargs):
        data = deepcopy(request.POST)
        form = self.form_class(data)
        mail = core_models.LicenseMailConfig.get_solo()

        if form.is_valid():
            obj = form.save()

            self.post_save(request, obj)

            event = 'новая отправка формы "%s"' % obj._meta.verbose_name
            try:
                send_trigger_email(
                    event, obj=obj, fields=obj.email_fields
                )
                send_email(
                    'order_admin',
                    [data['email']],
                    'Ваш заказ на сайте %s' % settings.SITE_NAME,
                    params={
                        'request': request,
                        'site': settings.SITE_NAME,
                        'site_url': settings.SITE_URL,
                        'mail': mail,
                    },
                    first_file=mail.first_file.path
                )

            except (SMTPException, ConnectionError):
                pass

            return success_response(self.success_message)

        return form_validation_error_response(form.errors)


emails.py:
def send_email(template, emails, subject, params=None, first_file=None, extra_headers=None, from_email=None, raise_error=False):
    """Отправка email с указанным шаблоном и параметрами"""
    if from_email is None:
        from_email = get_default_from_email()

    message_html = render_to_string(
        'emails/%s/%s.html' % (template, template), params, using='jinja2'
    )
    msg = EmailMessage(subject, message_html, from_email, emails, headers=extra_headers)

    if first_file is not None:
        msg.attach_file(first_file)

    try:
        return msg.send()

    except (ConnectionError, SMTPException):
        if raise_error:
            raise

    return 0
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
@xakslim Автор вопроса
Проблема крылась в размере файла самого pdf.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Начать отладку однозначно стоит с того, что прописать в settings.py
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_USE_TLS = False
EMAIL_USE_SSL = False

Запустить отладочный почтовый сервер
python -m smtpd -n -c DebuggingServer localhost:1025

Попробовать что-нибудь отправить и посмотреть на результат, как того советуют в документации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы