python - Django 是否使用 Mutt 作为其电子邮件后端?
问题描述
我知道你可以使用这个EMAIL_BACKEND
设置,我想我已经写了一个工作的 mutt 后端,但我不能将我的设置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
在不使用导入路径的情况下设置类,或找到其他解决方法?我做了一些谷歌搜索,但找不到其他任何人都得到了这样的工作。
解决方案
我想到了。默认配置假定 uWSGI 正在运行project/
,而不是project/app/
,所以我需要的导入路径是app.emails.MuttBackend
.