|
12 | 12 | from django.core.exceptions import ValidationError |
13 | 13 | from django.db.utils import DatabaseError |
14 | 14 | from edx_ace import ace |
| 15 | +from edx_ace.errors import RecoverableChannelDeliveryError |
15 | 16 | from edx_ace.message import Message |
16 | 17 | from edx_ace.utils.date import deserialize, serialize |
17 | 18 | from edx_django_utils.monitoring import ( |
|
23 | 24 | from importlib import import_module |
24 | 25 | from opaque_keys.edx.keys import CourseKey |
25 | 26 |
|
| 27 | +from openedx.core.djangoapps.ace_common.utils import should_route_to_ses |
26 | 28 | from openedx.core.djangoapps.content.course_overviews.models import CourseOverview |
27 | 29 | from openedx.core.djangoapps.schedules import message_types, resolvers |
28 | 30 | from openedx.core.djangoapps.schedules.models import Schedule, ScheduleConfig |
29 | 31 | from openedx.core.lib.celery.task_utils import emulate_http_request |
| 32 | +from openedx.features.course_experience import ENABLE_SES_FOR_COURSEUPDATE |
30 | 33 | from common.djangoapps.track import segment |
31 | 34 |
|
32 | 35 | LOG = logging.getLogger(__name__) |
@@ -283,15 +286,35 @@ def _schedule_send(msg_str, site_id, delivery_config_var, log_prefix): # lint-a |
283 | 286 | if _is_delivery_enabled(site, delivery_config_var, log_prefix): |
284 | 287 | msg = Message.from_string(msg_str) |
285 | 288 | msg.options['skip_disable_user_policy'] = True |
286 | | - |
287 | 289 | user = User.objects.get(id=msg.recipient.lms_user_id) |
288 | 290 | if not user.has_usable_password(): |
289 | 291 | LOG.info(f'{delivery_config_var} Scheduled email User is disabled {user.username}') |
290 | 292 | return |
291 | 293 | with emulate_http_request(site=site, user=user): |
292 | 294 | _annonate_send_task_for_monitoring(msg) |
293 | 295 | LOG.debug('%s: Sending message = %s', log_prefix, msg_str) |
294 | | - ace.send(msg) |
| 296 | + if should_route_to_ses(msg): |
| 297 | + msg.options.update({ |
| 298 | + 'from_address': settings.LMS_COMM_DEFAULT_FROM_EMAIL, |
| 299 | + 'override_default_channel': 'django_email', |
| 300 | + 'transactional': True, |
| 301 | + }) |
| 302 | + |
| 303 | + try: |
| 304 | + ace.send(msg) |
| 305 | + except RecoverableChannelDeliveryError: |
| 306 | + LOG.warning( |
| 307 | + '%s: SES send failed for user %s, raising for retry', |
| 308 | + log_prefix, |
| 309 | + user.id, |
| 310 | + ) |
| 311 | + raise |
| 312 | + LOG.info( |
| 313 | + '%s: Course Update email for user %s sent via %s', |
| 314 | + log_prefix, |
| 315 | + user.id, |
| 316 | + 'SES' if should_route_to_ses(msg) else 'default ACE channel', |
| 317 | + ) |
295 | 318 | _track_message_sent(site, user, msg) |
296 | 319 |
|
297 | 320 |
|
|
0 commit comments