【问题标题】:how to customize sent emails in djoser?如何在 djoser 中自定义发送的电子邮件?
【发布时间】:2022-07-04 21:33:54
【问题描述】:

我构建 React&Django 项目并使用 Djoser 进行注册和身份验证。我想在 Gmail 上自定义发送的电子邮件内容。我应该在哪里更改它?

【问题讨论】:

    标签: django djoser


    【解决方案1】:

    在您的 django 目录中创建一个应用程序或在现有应用程序 创建文件

    • email.py

    然后在 目录中创建模板文件夹,如:

    • 模板//

    目录下创建两个html文件:

    • ActivateEmail.html
    • ConfirmationEmail.html

    然后在 ActivationEmail.html 中添加以下代码:

    {% load i18n %}
    
    {% block subject %}
    {% blocktrans %}Account activation on {{ site_name }}{% endblocktrans %}
    {% endblock subject %}
    
    {% block text_body %}
    {% blocktrans %}You're receiving this email because you need to finish activation process on {{ site_name }}.{% endblocktrans %}
    
    {% trans "Please go to the following page to activate account:" %}
    {{ protocol }}://{{ domain }}/{{ url|safe }}
    
    {% trans "Thanks for using our site!" %}
    
    {% blocktrans %}The {{ site_name }} team{% endblocktrans %}
    {% endblock text_body %}
    
    {% block html_body %}
    <p>{% blocktrans %}You're receiving this email because you need to finish activation process on {{ site_name }}.{% endblocktrans %}</p>
    
    <p>{% trans "Please go to the following page to activate account:" %}</p>
    <p><a href="{{ protocol }}://{{ domain }}/{{ url|safe }}">{{ protocol }}://{{ domain }}/{{ url|safe }}</a></p>
    
    <p>{% trans "Thanks for using our site!" %}</p>
    
    <p>{% blocktrans %}The {{ site_name }} team{% endblocktrans %}</p>
    
    {% endblock html_body %}
    

    并在您的 ConfirmationEmail.html 中添加以下代码:

    {% load i18n %}
    
    {% block subject %}
    {% blocktrans %}{{ site_name }} - Your account has been successfully created and activated!{% endblocktrans %}
    {% endblock %}
    
    {% block text_body %}
    {% trans "Your account has been created and is ready to use!" %}
    
    {% trans "Thanks for using our site!" %}
    
    {% blocktrans %}The {{ site_name }} team{% endblocktrans %}
    {% endblock text_body %}
    
    {% block html_body %}
    <p>{% trans "Your account has been created and is ready to use!" %}</p>
    
    <p>{% trans "Thanks for using our site!" %}</p>
    
    <p>{% blocktrans %}The {{ site_name }} team{% endblocktrans %}</p>
    {% endblock html_body %}
    

    然后 email.py 在您的应用 中添加以下代码:

    from djoser import email
    from djoser import utils
    from djoser.conf import settings
    from django.contrib.auth.tokens import default_token_generator
    
    
    class ActivationEmail(email.ActivationEmail):
        template_name = '<my_app>/ActivationEmail.html'
    
        def get_context_data(self):
            # ActivationEmail can be deleted
            context = super().get_context_data()
    
            user = context.get("user")
            context["uid"] = utils.encode_uid(user.pk)
            context["token"] = default_token_generator.make_token(user)
            context["url"] = settings.ACTIVATION_URL.format(**context)
            return context
    
    
    class ConfirmationEmail(email.ConfirmationEmail):
        template_name = '<my_app>/ConfirmationEmail.html'
    
    

    然后编辑

    • ActivationEmail.html
    • ConfirmationEmail.html

    但是你喜欢

    那么最后一步就是在email.py中添加类来替换默认模板 在激活/确认电子邮件中。 默认值与文档中的一样:djoser docs 然后在 settings.py 文件中的 Djoser 设置中:

    DJOSER = {
        'USER_CREATE_PASSWORD_RETYPE': True,
        'SEND_CONFIRMATION_EMAIL': True,
        'SEND_ACTIVATION_EMAIL': True,
        'ACTIVATION_URL': 'activate/{uid}/{token}',
        'HIDE_USERS': True,
        'SERIALIZERS': {
            'user': 'myapp.serializers.UserCreateSerializer',
            'user_create': 'myapp.serializers.UserCreateSerializer',
            'current_user': 'myapp.serializers.UserSerializer',
        },
        (...)
    
    }
    

    添加这个:

    DJOSER = {
        'USER_CREATE_PASSWORD_RETYPE': True,
        'SEND_CONFIRMATION_EMAIL': True,
        'SEND_ACTIVATION_EMAIL': True,
        'ACTIVATION_URL': 'activate/{uid}/{token}',
        'HIDE_USERS': True,
        'SERIALIZERS': {
            'user': 'myapp.serializers.UserCreateSerializer',
            'user_create': 'myapp.serializers.UserCreateSerializer',
            'current_user': 'myapp.serializers.UserSerializer',
        },
        'EMAIL': {
            'activation': 'myapp.email.ActivationEmail',
            'confirmation': 'myapp.email.ConfirmationEmail',
        },
        (...)
    }
    

    然后发送电子邮件激活而不是在他/她的电子邮件中为用户发送默认模板,它将为他们发送 ActivationEmail.html 模板

    请注意,Djoser 使用django-template-mail 作为其激活电子邮件模板。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2016-09-16
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2014-07-27
      • 2015-08-25
      • 2013-04-09
      相关资源
      最近更新 更多