Django 是否使用 Mutt 作为其电子邮件后端?

Have Django use Mutt as its email backend?

我知道你可以使用 EMAIL_BACKEND 设置,我想我已经写了一个可以工作的 mutt 后端,但我不能将我的 EMAIL_BACKEND 设置为我的 class 因为它显然必须是字符串导入路径,而不是 class 的名称。本地路径 (emails) 不起作用,因为当前目录显然不在 Python 导入路径中。而且我不能使用本地包导入 (from . import),因为它当然必须是一个简单的字符串。

我通过将我的模块复制到 /usr/local/lib/python3.7/ 来让它工作,但这是一个糟糕的长期解决方案,甚至不值得。

我的项目目录结构如下:django/project/app/emails.pyapp/ 下,旁边是 settings.py 和其他目录。 project/app 结构对我来说意义不大(我只有一个应用程序),但我觉得这是设置 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 设置为 class,或者寻找其他解决方法?我做了一些谷歌搜索,但找不到任何其他人已经得到这样的东西来工作。

我明白了。默认配置假定 uWSGI 在 project/ 中是 运行,而不是 project/app/,所以我需要的导入路径是 app.emails.MuttBackend.