diff --git a/common/djangoapps/student/tasks.py b/common/djangoapps/student/tasks.py index 1e96fe523e..419ad550d0 100644 --- a/common/djangoapps/student/tasks.py +++ b/common/djangoapps/student/tasks.py @@ -8,18 +8,24 @@ import logging from celery.exceptions import MaxRetriesExceededError from celery.task import task # pylint: disable=no-name-in-module, import-error from django.conf import settings +from django.contrib.auth.models import User +from django.contrib.sites.models import Site from edx_ace import ace from edx_ace.errors import RecoverableChannelDeliveryError +from edx_ace.message import Message from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers +from openedx.core.lib.celery.task_utils import emulate_http_request log = logging.getLogger('edx.celery.task') @task(bind=True) -def send_activation_email(self, msg, from_address=None): +def send_activation_email(self, msg_string, from_address=None): """ Sending an activation email to the user. """ + msg = Message.from_string(msg_string) + max_retries = settings.RETRY_ACTIVATION_EMAIL_MAX_ATTEMPTS retries = self.request.retries @@ -31,8 +37,12 @@ def send_activation_email(self, msg, from_address=None): dest_addr = msg.recipient.email_address + site = Site.objects.get_current() + user = User.objects.get(username=msg.recipient.username) + try: - ace.send(msg) + with emulate_http_request(site=site, user=user): + ace.send(msg) # Log that the Activation Email has been sent to user without an exception log.info("Activation Email has been sent to User {user_email}".format( user_email=dest_addr diff --git a/common/djangoapps/student/tests/test_email.py b/common/djangoapps/student/tests/test_email.py index 4901c390b7..7e0137dd84 100644 --- a/common/djangoapps/student/tests/test_email.py +++ b/common/djangoapps/student/tests/test_email.py @@ -31,7 +31,6 @@ from student.views import ( confirm_email_change, do_email_change_request, generate_activation_email_context, - send_reactivation_email_for_user, validate_new_email ) from third_party_auth.views import inactive_user_view @@ -104,7 +103,7 @@ class ActivationEmailTests(EmailTemplateTagMixin, CacheIsolationTestCase): # sent from an OpenEdX installation. OPENEDX_FRAGMENTS = [ ( - u"You're almost there! Use the link below to activate your account to access engaging, " + u"Use the link below to activate your account to access engaging, " u"high-quality {platform_name} courses. Note that you will not be able to log back into your " u"account until you have activated it.".format( platform_name=settings.PLATFORM_NAME diff --git a/common/djangoapps/student/tests/test_tasks.py b/common/djangoapps/student/tests/test_tasks.py index b14e8dc3e6..bbebedc629 100644 --- a/common/djangoapps/student/tests/test_tasks.py +++ b/common/djangoapps/student/tests/test_tasks.py @@ -50,7 +50,7 @@ class SendActivationEmailTestCase(TestCase): from_address = 'task_testing@example.com' email_max_attempts = settings.RETRY_ACTIVATION_EMAIL_MAX_ATTEMPTS - send_activation_email.delay(self.msg, from_address=from_address) + send_activation_email.delay(str(self.msg), from_address=from_address) # Asserts sending email retry logging. for attempt in range(email_max_attempts): @@ -79,7 +79,7 @@ class SendActivationEmailTestCase(TestCase): """ from_address = 'task_testing@example.com' - send_activation_email.delay(self.msg, from_address=from_address) + send_activation_email.delay(str(self.msg), from_address=from_address) # Asserts that the error was logged mock_log.exception.assert_called_with( diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index 6cc3b60f32..d4c481119a 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -227,7 +227,7 @@ def compose_and_send_activation_email(user, profile, user_registration=None): root_url = configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL) msg = compose_activation_email(root_url, user, user_registration, route_enabled, profile.name) - send_activation_email.delay(msg) + send_activation_email.delay(str(msg)) @login_required diff --git a/common/templates/student/edx_ace/accountactivation/email/body.html b/common/templates/student/edx_ace/accountactivation/email/body.html index d4497672da..d6970cbba9 100644 --- a/common/templates/student/edx_ace/accountactivation/email/body.html +++ b/common/templates/student/edx_ace/accountactivation/email/body.html @@ -1,5 +1,6 @@ {% extends 'ace_common/edx_ace/common/base_body.html' %} +{% load django_markup %} {% load i18n %} {% load static %} {% block content %} @@ -8,7 +9,9 @@

- {% blocktrans %}This is a routed Account Activation email for {{ routed_user }} ({{ routed_user_email }}): {{ routed_profile_name }}{% endblocktrans %} + {% filter force_escape %} + {% blocktrans %}This is a routed Account Activation email for {{ routed_user }} ({{ routed_user_email }}): {{ routed_profile_name }}{% endblocktrans %} + {% endfilter %}

@@ -17,28 +20,35 @@

- {% trans "Account Activation" %} + {% trans "Account Activation" as header_msg %}{{ header_msg | force_escape }}

- {% blocktrans %}You're almost there! Use the link below to activate your account to access engaging, high-quality {{ platform_name }} courses. Note that you will not be able to log back into your account until you have activated it.{% endblocktrans %} + {% filter force_escape %} + {% blocktrans %}You're almost there! Use the link below to activate your account to access engaging, high-quality {{ platform_name }} courses. Note that you will not be able to log back into your account until you have activated it.{% endblocktrans %} + {% endfilter %}

- {% trans "Activate Your Account" as course_cta_text %} + {% trans "Activate Your Account" as course_cta_text %}{{ course_cta_text | force_escape }} {% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=confirm_activation_link %}

- {% blocktrans %}Enjoy learning with {{ platform_name }}.{% endblocktrans %} + {% filter force_escape %} + {% blocktrans %}Enjoy learning with {{ platform_name }}.{% endblocktrans %} + {% endfilter %}

- {% blocktrans %}If you need help, please use our web form at {{ support_url }} or email {{ support_email }}.{% endblocktrans %} + {% blocktrans trimmed asvar assist_msg %} + If you need help, please use our web form at {start_anchor_web}{{ support_url }}{end_anchor} or email {start_anchor_email}{{ support_email }}{end_anchor}. + {% endblocktrans %} + {% interpolate_html assist_msg start_anchor_web=''|safe start_anchor_email=''|safe end_anchor=''|safe %}

@@ -48,7 +58,9 @@

- {% blocktrans %}This email message was automatically sent by {{ lms_url }} because someone attempted to create an account on {{ platform_name }} using this email address.{% endblocktrans %} + {% filter force_escape %} + {% blocktrans %}This email message was automatically sent by {{ lms_url }} because someone attempted to create an account on {{ platform_name }} using this email address.{% endblocktrans %} + {% endfilter %}