Просмотр исходного кода

Add MISAGO_ADDRESS setting, absoluteurl template tag, and remove request from mail process

Rafał Pitoń 6 лет назад
Родитель
Сommit
bf8a517741
32 измененных файлов с 151 добавлено и 87 удалено
  1. 24 11
      misago/core/mail.py
  2. 19 0
      misago/core/templatetags/misago_absoluteurl.py
  3. 2 2
      misago/core/testproject/views.py
  4. 2 0
      misago/core/tests/test_mailer.py
  5. 27 1
      misago/core/tests/test_templatetags.py
  6. 3 3
      misago/templates/misago/emails/activation/by_admin.html
  7. 3 3
      misago/templates/misago/emails/activation/by_admin.txt
  8. 3 3
      misago/templates/misago/emails/activation/by_user.html
  9. 3 3
      misago/templates/misago/emails/activation/by_user.txt
  10. 2 1
      misago/templates/misago/emails/base.html
  11. 3 3
      misago/templates/misago/emails/change_email.html
  12. 3 3
      misago/templates/misago/emails/change_email.txt
  13. 3 3
      misago/templates/misago/emails/change_password.html
  14. 3 3
      misago/templates/misago/emails/change_password.txt
  15. 3 3
      misago/templates/misago/emails/change_password_form_link.html
  16. 3 3
      misago/templates/misago/emails/change_password_form_link.txt
  17. 3 3
      misago/templates/misago/emails/privatethread/added.html
  18. 3 3
      misago/templates/misago/emails/privatethread/added.txt
  19. 3 3
      misago/templates/misago/emails/register/complete.html
  20. 3 3
      misago/templates/misago/emails/register/complete.txt
  21. 3 3
      misago/templates/misago/emails/register/inactive.html
  22. 4 4
      misago/templates/misago/emails/register/inactive.txt
  23. 5 5
      misago/templates/misago/emails/thread/reply.html
  24. 4 4
      misago/templates/misago/emails/thread/reply.txt
  25. 2 2
      misago/threads/api/postingendpoint/emailnotification.py
  26. 2 3
      misago/threads/participants.py
  27. 2 4
      misago/users/api/auth.py
  28. 1 1
      misago/users/api/userendpoints/changeemail.py
  29. 2 1
      misago/users/api/userendpoints/changepassword.py
  30. 5 2
      misago/users/registration.py
  31. 1 1
      misago/users/views/admin/users.py
  32. 2 0
      runtests.py

+ 24 - 11
misago/core/mail.py

@@ -1,15 +1,26 @@
 from django.core import mail as djmail
 from django.template.loader import render_to_string
+from django.utils.translation import get_language
 
+from misago.conf import settings
 
-def build_mail(request, recipient, subject, template, context=None):
-    context = context or {}
-    context['sender'] = request.user
-    context['recipient'] = recipient
-    context['subject'] = subject
 
-    message_plain = render_to_string('%s.txt' % template, context, request=request)
-    message_html = render_to_string('%s.html' % template, context, request=request)
+def build_mail(recipient, subject, template, sender=None, context=None):
+    context = context.copy() if context else {}
+    context.update({
+        'SITE_ADDRESS': settings.MISAGO_ADDRESS,
+        'LANGUAGE_CODE': get_language()[:2],
+        'LOGIN_URL': settings.LOGIN_URL,
+
+        'misago_settings': settings,
+
+        'user': recipient,
+        'sender': sender,
+        'subject': subject,
+    })
+
+    message_plain = render_to_string('%s.txt' % template, context)
+    message_html = render_to_string('%s.html' % template, context)
 
     message = djmail.EmailMultiAlternatives(subject, message_plain, to=[recipient.email])
     message.attach_alternative(message_html, "text/html")
@@ -17,16 +28,18 @@ def build_mail(request, recipient, subject, template, context=None):
     return message
 
 
-def mail_user(request, recipient, subject, template, context=None):
-    message = build_mail(request, recipient, subject, template, context)
+# fixme: rename this function to email_user
+def mail_user(recipient, subject, template, sender=None, context=None):
+    message = build_mail(recipient, subject, template, sender, context)
     message.send()
 
 
-def mail_users(request, recipients, subject, template, context=None):
+# fixme: rename this function to email_users
+def mail_users(recipients, subject, template, sender=None, context=None):
     messages = []
 
     for recipient in recipients:
-        messages.append(build_mail(request, recipient, subject, template, context))
+        messages.append(build_mail(recipient, subject, template, sender, context))
 
     if messages:
         send_messages(messages)

+ 19 - 0
misago/core/templatetags/misago_absoluteurl.py

@@ -0,0 +1,19 @@
+from django import template
+from django.urls import reverse
+
+from misago.conf import settings
+
+register = template.Library()
+
+
+@register.simple_tag
+def absoluteurl(url_or_name, *args, **kwargs):
+    if not settings.MISAGO_ADDRESS:
+        return None
+
+    absolute_url_prefix = settings.MISAGO_ADDRESS.rstrip('/')
+
+    if '/' not in url_or_name:
+        url_or_name = reverse(url_or_name, args=args, kwargs=kwargs)
+    
+    return u'{}{}'.format(absolute_url_prefix, url_or_name)

+ 2 - 2
misago/core/testproject/views.py

@@ -22,14 +22,14 @@ UserModel = get_user_model()
 
 def test_mail_user(request):
     test_user = UserModel.objects.all().first()
-    mail.mail_user(request, test_user, "Misago Test Mail", "misago/emails/base")
+    mail.mail_user(test_user, "Misago Test Mail", "misago/emails/base")
 
     return HttpResponse("Mailed user!")
 
 
 def test_mail_users(request):
     mail.mail_users(
-        request, UserModel.objects.iterator(), "Misago Test Spam", "misago/emails/base"
+        UserModel.objects.iterator(), "Misago Test Spam", "misago/emails/base"
     )
 
     return HttpResponse("Mailed users!")

+ 2 - 0
misago/core/tests/test_mailer.py

@@ -11,6 +11,7 @@ UserModel = get_user_model()
 class MisagoMailerTests(TestCase):
     def test_mail_user(self):
         """mail_user sets message in backend"""
+        #fixme: nuke test view for mailing users!
         user = UserModel.objects.create_user('Bob', 'bob@bob.com', 'pass123')
 
         response = self.client.get(reverse('test-mail-user'))
@@ -26,6 +27,7 @@ class MisagoMailerTests(TestCase):
 
     def test_mail_users(self):
         """mail_users sets messages in backend"""
+        #fixme: nuke test view for mailing users!
         test_users = (
             UserModel.objects.create_user('Alpha', 'alpha@test.com', 'pass123'),
             UserModel.objects.create_user('Beta', 'beta@test.com', 'pass123'),

+ 27 - 1
misago/core/tests/test_templatetags.py

@@ -1,8 +1,34 @@
 from django import forms
 from django.template import Context, Template, TemplateSyntaxError
-from django.test import TestCase
+from django.test import TestCase, override_settings
 
 from misago.core.templatetags import misago_batch
+from misago.core.templatetags.misago_absoluteurl import absoluteurl
+
+
+TEST_ADDRESS = 'https://testsite.com/'
+
+
+class AbsoluteUrlTests(TestCase):
+    @override_settings(MISAGO_ADDRESS=None)
+    def test_address_is_none(self):
+        """template tag returns null if address setting is not filled"""
+        result = absoluteurl('misago:index')
+        self.assertIsNone(result)
+
+    
+    @override_settings(MISAGO_ADDRESS=TEST_ADDRESS)
+    def test_prefix_url(self):
+        """template tag prefixes already reversed url"""
+        result = absoluteurl('/')
+        self.assertEqual(result, TEST_ADDRESS)
+
+    
+    @override_settings(MISAGO_ADDRESS=TEST_ADDRESS)
+    def test_rprefix_url_name(self):
+        """template tag reverses url name and prefixes it"""
+        result = absoluteurl('misago:index')
+        self.assertEqual(result, TEST_ADDRESS)
 
 
 class CaptureTests(TestCase):

+ 3 - 3
misago/templates/misago/emails/activation/by_admin.html

@@ -1,15 +1,15 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, your account has been activated by forum administrator.
 {% endblocktrans %}
 <br>
 <br>
 {% capture trimmed as login_link %}
-<a href="{{ SITE_ADDRESS }}{% url LOGIN_URL %}">{% trans "this form" %}</a>
+<a href="{% absoluteurl LOGIN_URL %}">{% trans "this form" %}</a>
 {% endcapture %}
 {% blocktrans trimmed with login_form=login_link|safe %}
 You can now sign in to it using {{ login_form }}.

+ 3 - 3
misago/templates/misago/emails/activation/by_admin.txt

@@ -1,14 +1,14 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, your account has been activated by forum administrator.
 {% endblocktrans %}
 
 {% blocktrans trimmed %}
 You can now sign in to it using the form below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url LOGIN_URL %}
+{% absoluteurl LOGIN_URL %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/activation/by_user.html

@@ -1,13 +1,13 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, to activate your account click the below link:
 {% endblocktrans %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{% url 'misago:activate-by-token' pk=recipient.pk token=activation_token %}">{% trans "Activate my account!" %}</a>
+<a href="{% absoluteurl 'misago:activate-by-token' pk=user.pk token=activation_token %}">{% trans "Activate my account!" %}</a>
 <br>
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/activation/by_user.txt

@@ -1,10 +1,10 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, to activate your account click the below link:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url 'misago:activate-by-token' pk=recipient.pk token=activation_token %}
+{% absoluteurl 'misago:activate-by-token' pk=user.pk token=activation_token %}
 {% endblock content %}

+ 2 - 1
misago/templates/misago/emails/base.html

@@ -1,3 +1,4 @@
+{% load misago_absoluteurl %}
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="{{ LANGUAGE_CODE }}">
 <head>
@@ -55,7 +56,7 @@
               <table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0">
                 <tr>
                   <td valign="middle" style="font-size: 28px; line-height: 24px; color: #555555;">{{ misago_settings.forum_name }}</td>
-                  <td align="center" valign="middle" width="30"><img src="{{ SITE_ADDRESS }}{% url 'misago:user-avatar' pk=recipient.pk size=32 %}" width="32" height="32" style="border-radius: 3px;" alt=""></td>
+                  <td align="center" valign="middle" width="30"><img src="{% absoluteurl 'misago:user-avatar' pk=user.pk size=32 %}" width="32" height="32" style="border-radius: 3px;" alt=""></td>
                 </tr>
               </table>
             <br>

+ 3 - 3
misago/templates/misago/emails/change_email.html

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you have changed your e-mail address.
 {% endblocktrans %}
 <br>
@@ -13,6 +13,6 @@ To confirm this change, click the link below:
 {% endblocktrans %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{% url 'misago:options-confirm-email-change' token=token %}">{% trans "Save changes" %}</a>
+<a href="{% absoluteurl 'misago:options-confirm-email-change' token=token %}">{% trans "Save changes" %}</a>
 <br>
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/change_email.txt

@@ -1,14 +1,14 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you have changed your e-mail address.
 {% endblocktrans %}
 
 {% blocktrans trimmed %}
 To confirm this change, click the link below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url 'misago:options-confirm-email-change' token=token %}
+{% absoluteurl 'misago:options-confirm-email-change' token=token %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/change_password.html

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you have changed your password.
 {% endblocktrans %}
 <br>
@@ -13,6 +13,6 @@ To confirm this change, click the link below:
 {% endblocktrans %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{% url 'misago:options-confirm-password-change' token=token %}">{% trans "Save changes" %}</a>
+<a href="{% absoluteurl 'misago:options-confirm-password-change' token=token %}">{% trans "Save changes" %}</a>
 <br>
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/change_password.txt

@@ -1,14 +1,14 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you have changed your password.
 {% endblocktrans %}
 
 {% blocktrans trimmed %}
 To confirm this change, click the link below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url 'misago:options-confirm-password-change' token=token %}
+{% absoluteurl 'misago:options-confirm-password-change' token=token %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/change_password_form_link.html

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you want to change forgotten password for your forum account.
 {% endblocktrans %}
 <br>
@@ -13,6 +13,6 @@ To change your account password click the link below:
 {% endblocktrans %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{% url 'misago:forgotten-password-change-form' pk=recipient.pk token=confirmation_token %}">{% trans "Set new password" %}</a>
+<a href="{% absoluteurl 'misago:forgotten-password-change-form' pk=user.pk token=confirmation_token %}">{% trans "Set new password" %}</a>
 <br>
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/change_password_form_link.txt

@@ -1,14 +1,14 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, you are receiving this message because you want to change forgotten password for your forum account.
 {% endblocktrans %}
 
 {% blocktrans trimmed %}
 To change your account password click the link below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url 'misago:forgotten-password-change-form' pk=recipient.pk token=confirmation_token %}
+{% absoluteurl 'misago:forgotten-password-change-form' pk=user.pk token=confirmation_token %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/privatethread/added.html

@@ -1,12 +1,12 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block content %}
 {% capture trimmed as thread_title %}
 <b>{{ thread.title }}</b>
 {% endcapture %}
-{% blocktrans trimmed with user=recipient.username sender=sender.username thread=thread_title|safe %}
+{% blocktrans trimmed with user=user.username sender=sender.username thread=thread_title|safe %}
 {{ user }}, you are receiving this message because {{ sender }} has invited you to participate in private thread {{ thread }}.
 {% endblocktrans %}
 <br>
@@ -16,6 +16,6 @@ To read this thread click the link below:
 {% endblocktrans %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{{ thread.get_absolute_url }}">{{ thread.title }}</a>
+<a href="{% absoluteurl thread.get_absolute_url %}">{{ thread.title }}</a>
 <br>
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/privatethread/added.txt

@@ -1,14 +1,14 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient.username sender=sender.username thread=thread.title %}
+{% blocktrans trimmed with user=user.username sender=sender.username thread=thread.title %}
 {{ user }}, you are receiving this message because {{ sender }} has invited you to participate in private thread "{{ thread }}".
 {% endblocktrans %}
 
 {% blocktrans trimmed %}
 To read this thread click the link below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{{ thread.get_absolute_url }}
+{% absoluteurl thread.get_absolute_url %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/register/complete.html

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, thank you for joining us!
 {% endblocktrans %}
 <br>
@@ -15,7 +15,7 @@ You may now join discussion on our forums. Why not spend a minute or two to have
 <br>
 <br>
 {% capture trimmed as login_link %}
-<a href="{{ SITE_ADDRESS }}{% url LOGIN_URL %}">{% trans "this form" %}</a>
+<a href="{% absoluteurl LOGIN_URL %}">{% trans "this form" %}</a>
 {% endcapture %}
 {% blocktrans trimmed with login_form=login_link|safe %}
 You can always sign in to your account using {{ login_form }}.

+ 3 - 3
misago/templates/misago/emails/register/complete.txt

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, thank you for joining us!
 {% endblocktrans %}
 
@@ -14,5 +14,5 @@ You may now join discussion on our forums. Why not spend a minute or two to have
 {% blocktrans trimmed %}
 You can always sign in to your account using the form below:
 {% endblocktrans %}
-{{ SITE_ADDRESS }}{% url LOGIN_URL %}
+{% absoluteurl LOGIN_URL %}
 {% endblock content %}

+ 3 - 3
misago/templates/misago/emails/register/inactive.html

@@ -1,5 +1,5 @@
 {% extends "misago/emails/register/complete.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block activation-message %}
@@ -24,11 +24,11 @@
   {% endblocktrans %}
   <br>
   <br>
-  <a href="{{ SITE_ADDRESS }}{% url 'misago:activate-by-token' pk=recipient.pk token=activation_token %}">{% trans "Activate my account!" %}</a>
+  <a href="{% absoluteurl 'misago:activate-by-token' pk=user.pk token=activation_token %}">{% trans "Activate my account!" %}</a>
   <br>
   <br>
   {% capture trimmed as login_link %}
-  <a href="{{ SITE_ADDRESS }}{% url LOGIN_URL %}">{% trans "this form" %}</a>
+  <a href="{% absoluteurl LOGIN_URL %}">{% trans "this form" %}</a>
   {% endcapture %}
   {% blocktrans trimmed with login_form=login_link|safe %}
   Once your account is activated, you can always sign in to it using {{ login_form }}.

+ 4 - 4
misago/templates/misago/emails/register/inactive.txt

@@ -1,9 +1,9 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient %}
+{% blocktrans trimmed with user=user %}
 {{ user }}, thank you for joining us!
 {% endblocktrans %}
 {% if activation_by_admin %}
@@ -25,11 +25,11 @@
   {% blocktrans trimmed %}
   Before you will be able to join discussion on our forums, you have to activate your account. To do so, simply click the link below:
   {% endblocktrans %}
-  {{ SITE_ADDRESS }}{% url 'misago:activate-by-token' pk=recipient.pk token=activation_token %}"
+  {% absoluteurl 'misago:activate-by-token' pk=user.pk token=activation_token %}"
 
   {% blocktrans trimmed with login_form=login_link|safe %}
   Once your account is activated, you can always sign in to it using the form below:
   {% endblocktrans %}
-  {{ SITE_ADDRESS }}{% url LOGIN_URL %}
+  {% absoluteurl LOGIN_URL %}
 {% endif %}
 {% endblock content %}

+ 5 - 5
misago/templates/misago/emails/thread/reply.html

@@ -1,19 +1,19 @@
 {% extends "misago/emails/base.html" %}
-{% load i18n misago_capture %}
+{% load i18n misago_absoluteurl misago_capture %}
 
 
 {% block content %}
 {% capture trimmed as thread_link %}
-  <a href="{{ SITE_ADDRESS }}{{ thread.get_absolute_url }}">{{ thread }}</a>
+  <a href="{% absoluteurl thread.get_absolute_url %}">{{ thread }}</a>
 {% endcapture %}
-{% blocktrans trimmed with user=recipient poster=user thread=thread_link|safe %}
-{{ user }}, you are receiving this message because {{ poster }} has replied to the thread {{ thread }} that you are subscribed to.
+{% blocktrans trimmed with user=user sender=sender thread=thread_link|safe %}
+{{ user }}, you are receiving this message because {{ sender }} has replied to the thread {{ thread }} that you are subscribed to.
 {% endblocktrans %}
 <br>
 <br>
 {% trans "To read this reply, click the below link:" %}
 <br>
 <br>
-<a href="{{ SITE_ADDRESS }}{{ post.get_absolute_url }}">{% trans "Go to reply" %}</a>
+<a href="{% absoluteurl post.get_absolute_url %}">{% trans "Go to reply" %}</a>
 <br>
 {% endblock content %}

+ 4 - 4
misago/templates/misago/emails/thread/reply.txt

@@ -1,12 +1,12 @@
 {% extends "misago/emails/base.txt" %}
-{% load i18n %}
+{% load i18n misago_absoluteurl %}
 
 
 {% block content %}
-{% blocktrans trimmed with user=recipient poster=user thread=thread %}
-{{ user }}, you are receiving this message because {{ poster }} has replied to the thread "{{ thread }}" that you are subscribed to.
+{% blocktrans trimmed with user=user sender=sender thread=thread %}
+{{ user }}, you are receiving this message because {{ sender }} has replied to the thread "{{ thread }}" that you are subscribed to.
 {% endblocktrans %}
 
 {% trans "To read this reply, click the below link:" %}
-{{ SITE_ADDRESS }}{{ post.get_absolute_url }}
+{% absoluteurl post.get_absolute_url %}
 {% endblock content %}

+ 2 - 2
misago/threads/api/postingendpoint/emailnotification.py

@@ -43,11 +43,11 @@ class EmailNotificationMiddleware(PostingMiddleware):
         subject_formats = {'user': self.user.username, 'thread': self.thread.title}
 
         return build_mail(
-            self.request,
             subscriber,
             subject % subject_formats,
             'misago/emails/thread/reply',
-            {
+            sender=self.user,
+            context={
                 'thread': self.thread,
                 'post': self.post,
             },

+ 2 - 3
misago/threads/participants.py

@@ -149,9 +149,8 @@ def build_noticiation_email(request, thread, user):
     }
 
     return build_mail(
-        request, user, subject % subject_formats, 'misago/emails/privatethread/added', {
-            'thread': thread,
-        }
+        user, subject % subject_formats, 'misago/emails/privatethread/added',
+        sender=request.user, context={'thread': thread}
     )
 
 

+ 2 - 4
misago/users/api/auth.py

@@ -103,11 +103,10 @@ def send_activation(request):
         }
 
         mail_user(
-            request,
             requesting_user,
             mail_subject,
             'misago/emails/activation/by_user',
-            {
+            context={
                 'activation_token': make_activation_token(requesting_user),
             },
         )
@@ -144,11 +143,10 @@ def send_password_form(request):
         confirmation_token = make_password_change_token(requesting_user)
 
         mail_user(
-            request,
             requesting_user,
             mail_subject,
             'misago/emails/change_password_form_link',
-            {
+            context={
                 'confirmation_token': confirmation_token,
             },
         )

+ 1 - 1
misago/users/api/userendpoints/changeemail.py

@@ -25,7 +25,7 @@ def change_email_endpoint(request, pk=None):
         request.user.email = serializer.validated_data['new_email']
 
         mail_user(
-            request, request.user, mail_subject, 'misago/emails/change_email', {'token': token}
+            request.user, mail_subject, 'misago/emails/change_email', context={'token': token}
         )
 
         message = _("E-mail change confirmation link was sent to new address.")

+ 2 - 1
misago/users/api/userendpoints/changepassword.py

@@ -24,7 +24,8 @@ def change_password_endpoint(request, pk=None):
         mail_subject = mail_subject % {'forum_name': settings.forum_name}
 
         mail_user(
-            request, request.user, mail_subject, 'misago/emails/change_password', {'token': token}
+            request.user, mail_subject, 'misago/emails/change_password',
+            context={'token': token}
         )
 
         return Response({

+ 5 - 2
misago/users/registration.py

@@ -16,14 +16,17 @@ def send_welcome_email(request, user):
         activation_by_user = user.requires_activation_by_user
 
         mail_user(
-            request, user, mail_subject, 'misago/emails/register/inactive', {
+            user,
+            mail_subject,
+            'misago/emails/register/inactive',
+            context={
                 'activation_token': activation_token,
                 'activation_by_admin': activation_by_admin,
                 'activation_by_user': activation_by_user,
             }
         )
     else:
-        mail_user(request, user, mail_subject, 'misago/emails/register/complete')
+        mail_user(user, mail_subject, 'misago/emails/register/complete')
 
 
 def get_registration_result_json(user):

+ 1 - 1
misago/users/views/admin/users.py

@@ -114,7 +114,7 @@ class UsersList(UserAdmin, generic.ListView):
             subject = _("Your account on %(forum_name)s forums has been activated")
             mail_subject = subject % {'forum_name': settings.forum_name}
 
-            mail_users(request, inactive_users, mail_subject, 'misago/emails/activation/by_admin')
+            mail_users(inactive_users, mail_subject, 'misago/emails/activation/by_admin')
 
             messages.success(request, _("Selected users accounts have been activated."))
 

+ 2 - 0
runtests.py

@@ -83,6 +83,8 @@ PASSWORD_HASHERS = (
     'django.contrib.auth.hashers.MD5PasswordHasher',
 )
 
+# Default misago address to test address
+MISAGO_ADDRESS = 'http://testserver/'
 
 # Use english search config
 MISAGO_SEARCH_CONFIG = 'english'