【问题标题】:Adding a Dynamic Email Backend in Django在 Django 中添加动态电子邮件后端
【发布时间】:2021-03-14 07:12:26
【问题描述】:

我想让我的用户自行决定他们的电子邮件后端。这就是为什么我在用户上创建了与电子邮件相关的密钥(主机、端口、用户名......),现在我尝试将这个(见下文)后端工作到我的 Django 项目中。使用the docssource code,我的第一次尝试是通过我的自定义“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 ...)

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

【问题讨论】:

    标签: python django email


    【解决方案1】:

    send_email 有一个名为connection (link to docs) 的参数似乎非常适合。您可以通过使用用户参数调用get_connection (link to docs) 来获得连接。

    connection = get_connection(host=user.email_host, port=user.email_port, ...)
    send_email(connection=connection, ...)
    

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

    【讨论】:

    • 听起来不错,我稍后会测试这个。感谢您的回答!
    • 这似乎有效!非常感谢,您知道这与最佳实践有关吗?
    • 这只是使用 Django API 的公共和文档化部分。他们将来可能会更改 API,但我认为他们不会,因为没有理由这样做。
    • 我知道,我想等待是否有其他答案,但我想没有。再次感谢@Martí
    猜你喜欢
    • 2018-01-12
    • 1970-01-01
    • 2013-04-17
    • 2023-03-22
    • 1970-01-01
    • 2010-09-19
    • 2013-05-20
    • 2020-11-13
    • 2015-05-29
    相关资源
    最近更新 更多