feat: Make account activation use html e-mail

This commit is contained in:
2025-07-07 20:59:52 +02:00
parent ba8ff743f2
commit 4856c720b1
4 changed files with 57 additions and 14 deletions

View File

@@ -0,0 +1,29 @@
from django.utils.html import strip_tags
from django_registration.backends.activation.views import RegistrationView
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.conf import settings
class HTMLMailRegistrationView(RegistrationView):
def send_activation_email(self, user):
"""
overwrites the function in django registration
"""
activation_key = self.get_activation_key(user)
context = self.get_email_context(activation_key)
context["user"] = user
subject = render_to_string(
template_name=self.email_subject_template,
context=context,
request=self.request,
)
# Force subject to a single line to avoid header-injection issues.
subject = "".join(subject.splitlines())
message = render_to_string(
template_name=self.email_body_template,
context=context,
request=self.request,
)
plain_message = strip_tags(message)
user.email_user(subject, plain_message, settings.DEFAULT_FROM_EMAIL, html_message=message)

View File

@@ -0,0 +1,24 @@
{% extends "fellchensammlung/mail/base.html" %}
{% load i18n %}
{% block title %}
{{ site.name }}: {% trans "Account aktivieren" %}
{% endblock %}
{% block content %}
<p>
{% trans 'Hier ist dein Aktivierungs-Key. Mit diesem kannst du deinen Account freischalten.' %}
</p>
<code>
{{ activation_key }}
</code>
<p>
{% trans "Öffne den folgenden link im Browser und gib den Aktivierungs-Key dort ein" %}
</p>
<a href="https://{{ site.domain }}{% url 'django_registration_activate' %}"
class="cta-button">{% translate 'Jetzt aktivieren' %}</a>
<p>
{% blocktrans %}Der Link ist für {{ expiration_days }} Tage gültig.{% endblocktrans %}
</p>
{% endblock %}

View File

@@ -1,10 +1,9 @@
from django.urls import path, include
from django_registration.backends.activation.views import RegistrationView
from .forms import CustomRegistrationForm
from .feeds import LatestAdoptionNoticesFeed
from . import views
from . import views, registration_views
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
from django.contrib.sitemaps.views import sitemap
@@ -79,8 +78,9 @@ urlpatterns = [
path('user/me/export/', views.export_own_profile, name='user-me-export'),
path('accounts/register/',
RegistrationView.as_view(
form_class=CustomRegistrationForm
registration_views.HTMLMailRegistrationView.as_view(
form_class=CustomRegistrationForm,
email_body_template="fellchensammlung/mail/activation_email.html",
),
name='django_registration_register',
),

View File

@@ -1,10 +0,0 @@
{% load i18n %}
{{ site.name }}: {% trans "Account aktivieren" %}
{% trans 'Hier ist dein Aktivierungs-Key. Mit diesem kannst du deinen Account freischalten.' %}
{{ activation_key }}
{% trans "Öffne den folgenden link im Browser und gib den Aktivierungs-Key dort ein" %}:
https://{{ site.domain }}{% url 'django_registration_activate' %}
{% blocktrans %}Der Link ist für {{ expiration_days }} Tage gültig.{% endblocktrans %}