在 Django 中添加动态电子邮件后端

cre*_*eyD 7 python email django

我想让我的用户自己决定他们的电子邮件后端。这就是为什么我在用户上创建了与电子邮件相关的密钥(主机、端口、用户名...),现在我尝试将此(见下文)后端工作到我的 Django 项目中。使用文档源代码,我的第一次尝试是通过我的自定义“UserBackend”扩展默认的 EmailBackend,它覆盖了__init__这样的函数:

class UserBackend(EmailBackend):
    def __init__(self, user_id, host=None, port=None, username=None ...):
        user = User.objects.get(id=user_id)
        super().init(host=user.email_host, port=user.email_port ...)
Run Code Online (Sandbox Code Playgroud)

当这个方法被调用时(我试图send_mail从 shell 中调用)它没有user_id. 我如何以不同的方式处理这个问题,或者我将如何扩展我的尝试?我不想完全重写 Django 的邮件系统,因为它本身就可以工作。

Mar*_*rtí 4

send_email有一个名为connection链接到文档)的参数,它似乎非常适合。您可以通过使用用户参数调用get_connection链接到文档)来获取连接。

connection = get_connection(host=user.email_host, port=user.email_port, ...)
send_email(connection=connection, ...)
Run Code Online (Sandbox Code Playgroud)

如果你想支持多种后端类型,get_connection也支持。