用户对象创建时如何发送邮件给用户?

3 投票
3 回答
1037 浏览
提问于 2025-04-16 20:51

我正在搭建的系统中,用户不能自己注册。用户是由系统管理员添加的。所以没有用户注册的表单或页面。注册只在管理员那进行,所以我想发送邮件的功能也应该在管理员那里(我这样想对吗)?

我需要在用户被创建时自动发送一封邮件给他/她,而不是在每次保存模型的时候都发送。

有没有人能帮我解决这个问题?有没有什么内置的功能可以做到这一点?或者我该怎么做呢?

我看过关于create_user用户管理器的内容,但我觉得还有比编辑管理器更好的方法。

3 个回答

1

你可以使用信号框架。在用户对象上使用一个“保存后”的信号是合适的,具体可以参考这里的类似例子。

2

使用 post_save 信号,这个信号会带一个叫 created 的参数。如果这个参数是 true,就发送你的邮件。

补充

Shawn Chin 比我先回答了这个问题,接受他的答案吧。

6

你可以在用户模型的 post_save 信号上注册一个回调函数。大概可以这样做:

# note: untested code

from django.db.models.signals import post_save
from django.contrib.auth.models import User

def email_new_user(sender, **kwargs):
    if kwargs["created"]:  # only for new users
        new_user = kwargs.["instance"]
        # send email to new_user.email ..

post_save.connect(email_new_user, sender=User)

注意这里的 if kwargs["created"]: 条件,它是用来检查这个用户实例是否是新创建的。

撰写回答