Python Django是否使用Mutt作为其电子邮件后端?
我知道您可以使用Python Django是否使用Mutt作为其电子邮件后端?,python,django,python-import,mutt,Python,Django,Python Import,Mutt,我知道您可以使用EMAIL\u BACKEND设置,我想我已经编写了一个工作的mutt后端,但是我不能将EMAIL\u BACKEND设置为我的类,因为它显然必须是字符串导入路径,而不是类的名称。本地路径(电子邮件)不起作用,因为当前目录显然不在Python导入路径中。我不能使用本地包导入(from.import),因为它当然必须是一个简单的字符串 我通过将我的模块复制到/usr/local/lib/python3.7/中来实现它,但这是一个非常糟糕的长期解决方案,甚至不值得 我的项目目录结构如
EMAIL\u BACKEND
设置,我想我已经编写了一个工作的mutt后端,但是我不能将EMAIL\u BACKEND
设置为我的类,因为它显然必须是字符串导入路径,而不是类的名称。本地路径(电子邮件
)不起作用,因为当前目录显然不在Python导入路径中。我不能使用本地包导入(from.import
),因为它当然必须是一个简单的字符串
我通过将我的模块复制到/usr/local/lib/python3.7/
中来实现它,但这是一个非常糟糕的长期解决方案,甚至不值得
我的项目目录结构如下:django/project/app/
,在app/
下有emails.py
,旁边是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\u BACKEND
设置为类,或找到其他解决方法?我在谷歌上搜索了一下,但找不到其他人能找到这样的东西。我找到了答案。默认配置假定uWSGI是在project/
中运行的,而不是project/app/
,因此我需要的导入路径是app.emails.MuttBackend
您可以指定在哪里编写MuttBackend
(相对于项目根?
(就在models.py
、settings.py
和其他文件夹中)好的,我刚刚意识到我应该把这个放到编辑中。我编辑了这个问题,以包含有关项目目录结构的更多信息。