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.py
在 app/
下,旁边是 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
.
我知道你可以使用 EMAIL_BACKEND
设置,我想我已经写了一个可以工作的 mutt 后端,但我不能将我的 EMAIL_BACKEND
设置为我的 class 因为它显然必须是字符串导入路径,而不是 class 的名称。本地路径 (emails
) 不起作用,因为当前目录显然不在 Python 导入路径中。而且我不能使用本地包导入 (from . import
),因为它当然必须是一个简单的字符串。
我通过将我的模块复制到 /usr/local/lib/python3.7/
来让它工作,但这是一个糟糕的长期解决方案,甚至不值得。
我的项目目录结构如下:django/project/app/
,emails.py
在 app/
下,旁边是 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
.