Corregir errores en Bulk mail

La plataforma en su opción de notificaciones por curso, tiene un error, ya que al estar preparando el correo, genera un from_mail extraño, por ejemplo si el correo que usas para notificaciones es notificar@example.com, la función agrega parte del nombre del curso, algo como DemoX-notificar@example.com, esta opción no es raro que se haga cuando enmascaras el correo, pero por una extraña razón la función manda el correo modificado a los parámetros de autentificación de correo electrónico, mandando error en la plataforma.

Adjunto un fragmento del log para que puedan ubicarlo:

May 30 00:44:44 edu [service_variant=lms][edx.celery.task][env:sandbox] ERROR [edu  1380] [tasks.py:686] - Task 3434e424-b73e-45e8-8834-6712c3e1036f: email with id 4 caused send_course_email task to fail with "fatal" exception.  6 emails unsent.
Traceback (most recent call last):
  File "/edx/app/edxapp/edx-platform/lms/djangoapps/bulk_email/tasks.py", line 567, in _send_course_email
    connection.send_messages([email_msg])
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 111, in send_messages
    sent = self._send(message)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 127, in _send
    self.connection.sendmail(from_email, recipients, message.as_bytes(linesep='\r\n'))
  File "/usr/lib/python2.7/smtplib.py", line 747, in sendmail
    raise SMTPRecipientsRefused(senderrs)
SMTPRecipientsRefused: {u'sbernesto@gmail.com': (550, 'Verification failed for <DemoX-edu@bunited.mx>\nNo Such User Here"\nSender verify failed')}
May 30 00:44:44 edu [service_variant=lms][edx.celery.task][env:sandbox] ERROR [edu  1380] [tasks.py:326] - Send-email task 3434e424-b73e-45e8-8834-6712c3e1036f for email 4: failed: {u'sbernesto@gmail.com': (550, 'Verification failed for <DemoX-edu@example.com>\nNo Such User Here"\nSender verify failed')}

Como pueden ver la ultima línea, se puede leer la modificación del correo, les menciono que este error lo pude identificar con un correo debido a que este no pertenece a gsuite o office365, ya que estos solo hacen referencia a un error de autentificación.

Bueno para resolverlo debemos de seguir los siguientes pasos:

  1. Abrir archivo con su editor favorito:
    /edx/app/edxapp/edx-platform/lms/djangoapps/bulk_email/tasks.py
  2. Ubicar la funcion format_address o ir la linea 407 aprox o ubicar la linea:
    from_addr = format_address(course_title_no_quotes)
  3. Sustituir el valor:
    from_addr = settings.BULK_EMAIL_DEFAULT_FROM_EMAIL
  4. Compilar el archivo modificado:
    python -m compileall task.py
  5. Cambiar el dueño del archivo compilado:
    chown edxa:edxapp task.pyc
  6. Reiniciar todos los servicios:
    /edx/bin/supervisorctl restart all
  7. Probar que envie el correo

Hice una grabación con asciinema para que puedan ver la modificación, es la primera que hago y espero mejorar en los próximos post estos videos.