The old name was `student.send_activation_email`. The new name is now `common.djangoapps.student.tasks.send_activation_email`. We no longer user the old task name, so we can safely stop registering it with Celery workers, without fear of dropping any lingering tasks under the old name.
70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
"""
|
|
This file contains celery tasks for sending email
|
|
"""
|
|
|
|
|
|
import logging
|
|
|
|
from celery.exceptions import MaxRetriesExceededError
|
|
from celery import shared_task
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-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 edx_django_utils.monitoring import set_code_owner_attribute
|
|
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')
|
|
|
|
|
|
@shared_task(bind=True)
|
|
@set_code_owner_attribute
|
|
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
|
|
|
|
if from_address is None:
|
|
from_address = configuration_helpers.get_value('ACTIVATION_EMAIL_FROM_ADDRESS') or (
|
|
configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
|
|
)
|
|
msg.options['from_address'] = from_address
|
|
|
|
dest_addr = msg.recipient.email_address
|
|
|
|
site = Site.objects.get_current()
|
|
user = User.objects.get(username=msg.recipient.username)
|
|
|
|
try:
|
|
with emulate_http_request(site=site, user=user):
|
|
ace.send(msg)
|
|
except RecoverableChannelDeliveryError:
|
|
log.info('Retrying sending email to user {dest_addr}, attempt # {attempt} of {max_attempts}'.format(
|
|
dest_addr=dest_addr,
|
|
attempt=retries,
|
|
max_attempts=max_retries
|
|
))
|
|
try:
|
|
self.retry(countdown=settings.RETRY_ACTIVATION_EMAIL_TIMEOUT, max_retries=max_retries)
|
|
except MaxRetriesExceededError:
|
|
log.error(
|
|
'Unable to send activation email to user from "%s" to "%s"',
|
|
from_address,
|
|
dest_addr,
|
|
exc_info=True
|
|
)
|
|
except Exception:
|
|
log.exception(
|
|
'Unable to send activation email to user from "%s" to "%s"',
|
|
from_address,
|
|
dest_addr,
|
|
)
|
|
raise Exception # lint-amnesty, pylint: disable=raise-missing-from
|