Django использует Mutt в качестве почтового сервера? - PullRequest
2 голосов
/ 25 февраля 2020

Я знаю, что вы можете использовать настройку EMAIL_BACKEND, и я думаю, что написал рабочий бэкэнд дурака, но я не могу установить свой EMAIL_BACKEND для своего класса, потому что, очевидно, это должен быть путь импорта строк, не название класса. Локальный путь (emails) не работает, поскольку текущий каталог явно не находится в пути импорта Python. И я не могу использовать локальный импорт пакетов (from . import), потому что, конечно, это должна быть простая строка.

Я заработал, скопировав мой модуль в /usr/local/lib/python3.7/, но это так ужасное долгосрочное решение, которое даже не стоит.

Структура моего каталога проекта выглядит так: django/project/app/, с emails.py в app/, рядом с settings.py и другими. Структура проекта / приложения не имела для меня большого смысла (у меня есть только одно приложение), но у меня сложилось впечатление, что это был намеченный способ настройки Django, поэтому я и сделал это.

Это не должно относиться к делу, но, кстати, мой бэкэнд-код Mutt:

import subprocess
from django.core.mail.backends.base import BaseEmailBackend

class MuttBackend(BaseEmailBackend):
    def send_messages(self, email_messages):
        for m in email_messages: self.send(m)
    def send(self, message):
        print(message.subject, message.from_email, message.to, message.body)
        mutt = subprocess.Popen(args = ['/usr/local/bin/mutt', *message.to,
            '-s', message.subject,
            '-e', f'set from="{message.from_email}"'],
            stdin = subprocess.PIPE)
        mutt.stdin.write(bytes(message.body, 'utf-8'))
        mutt.stdin.close()

Как я могу установить EMAIL_BACKEND для класса без использования пути импорта или найти другой обходной путь ? Я немного погуглил, но не смог найти никого, кто бы мог заставить что-то подобное работать.

1 Ответ

1 голос
/ 12 марта 2020

Я понял это. Конфигурация по умолчанию предполагала, что uWSGI работал в project/, а не project/app/, поэтому мне понадобился путь импорта app.emails.MuttBackend.

...