Repositorio: Plugin Discourse Priority Action Mailer
¿Qué hace este plugin?
Este plugin agrega dos nuevos “canales” SMTP además del canal SMTP predeterminado estándar de Discourse. Un canal es para correos electrónicos de “alta prioridad”, que son (subjetivamente) notificaciones cuando un usuario solicita iniciar sesión por correo electrónico, se registra o solicita un restablecimiento de contraseña. El otro canal es para correos electrónicos de resúmenes (digest). Si no se configura ninguno de estos nuevos canales SMTP (más sobre esto más adelante), los nuevos canales usarán por defecto el canal SMTP estándar de Discourse.
¿Por qué debería alguien preocuparse o instalar este plugin?
Tener un solo canal SMTP donde los correos de “alta prioridad” para los usuarios, como las solicitudes de inicio de sesión por correo electrónico, estén en el mismo canal que los resúmenes (por ejemplo), crea un problema potencial de “disponibilidad”Nota 1, especialmente si el canal SMTP predeterminado tiene límites establecidos.
Experimentamos este problema directamente cuando migramos por primera vez a Discourse desde nuestro foro heredado y utilizamos una cuenta de Google Workspace (anteriormente conocida como G Suite). Debido a que Google limita esta cuenta, esa cuenta de correo electrónico específica quedó “bloqueada” durante unos días. Eso no fue realmente un problema grave porque simplemente creamos otra cuenta y desactivamos los resúmenes; pero durante un breve periodo, los miembros no pudieron iniciar sesión por correo electrónico ni registrarse.
Mi experiencia en ciberseguridad e ingeniería de sistemas en general señaló este único canal de correo electrónico como un “punto único de fallo”, por lo que tomé nota de solucionarlo; y este plugin lo soluciona moviendo todos los correos de resumen a un canal SMTP diferente.
De hecho, es bastante fácil hacer esto, como puedes ver por lo simple que es el código de este plugin.
¿Cómo instalas este plugin?
Es sencillo instalar este plugin.
- Instala el plugin tal como lo harías con cualquier otro plugin de Discourse.
- Define tus credenciales SMTP adicionales en tus archivos de construcción del contenedor (tus archivo(s)
.yml)
Se utilizan las siguientes variables de entorno adicionales del contenedor de Discourse, a menos que desees los valores predeterminados. Estas variables de entorno SMTP son básicamente las mismas que las variables de entorno SMTP predeterminadas de Discourse, pero con _PRIORITY y _DIGEST agregados a cada una:
VARIABLES DE ENTORNO DEL CANAL DE PRIORIDAD
env:
DISCOURSE_SMTP_ADDRESS_PRIORITY:
DISCOURSE_SMTP_PORT_PRIORITY:
DISCOURSE_SMTP_USER_NAME_PRIORITY:
DISCOURSE_SMTP_PASSWORD_PRIORITY:
DISCOURSE_SMTP_AUTHENTICATION_PRIORITY: # normalmente establecido en plain
DISCOURSE_SMTP_ENABLE_START_TLS_PRIORITY: # normalmente establecido en true
VARIABLES DE ENTORNO DEL CANAL DE RESÚMENES (DIGEST)
env:
DISCOURSE_SMTP_ADDRESS_DIGEST:
DISCOURSE_SMTP_PORT_DIGEST:
DISCOURSE_SMTP_USER_NAME_DIGEST:
DISCOURSE_SMTP_PASSWORD_DIGEST:
DISCOURSE_SMTP_AUTHENTICATION_DIGEST: # normalmente establecido en plain
DISCOURSE_SMTP_ENABLE_START_TLS_DIGEST: # normalmente establecido en true
El plugin asignará por defecto cada uno de los canales anteriores al canal estándar de Discourse si no especificas uno.
Notas para desarrolladores
Este plugin de Discourse crea un nuevo canal SMTP de “alta prioridad” para mensajes SMTP de “mayor prioridad” y un nuevo canal de “resúmenes” solo para los resúmenes enviados a los usuarios, incluyendo el AdminConfirmationMailer y los siguientes métodos en el mailer UserNotifications:
ACCIONES DEL CANAL DE PRIORIDAD
- :email_login,
- :signup,
- :forgot_password,
- :admin_login
ACCIÓN DEL CANAL DE RESÚMENES (DIGEST)
- :digest
Este nuevo canal SMTP de “alta prioridad” debería ser diferente de tu canal estándar donde Discourse envía resúmenes, etc.
Las opciones anteriores para “alta prioridad” fueron completamente subjetivas (por mi parte) y pueden cambiarse fácilmente modificando el plugin.
Puedes verificar fácilmente tu configuración en el contenedor usando la consola de rails. Por ejemplo, para mostrar tu configuración SMTP para tu “canal de prioridad”, puedes ejecutar:
rails c
Rails.application.config.priority_smtp_settings
Lo mismo para los canales de “resúmenes”:
rails c
Rails.application.config.digest_smtp_settings
Y lo mismo para la configuración SMTP predeterminada OOTB:
rails c
Rails.application.config.action_mailer.smtp_settings
Si instalas el plugin y no estableces las variables de entorno en el archivo de construcción del contenedor, puedes verificar fácilmente que todas están predeterminadas a Rails.application.config.action_mailer.smtp_settings
Además, puedes verificar fácilmente los paneles de administración de Discourse:
- /admin/email/sent
- /sidekiq
y confirmar que todo funciona correctamente.
PRUEBAS
Esta versión (v0.1) ha sido probada en vivo durante varios días y, hasta ahora, funciona sin fallos.
PARA ADMINISTRADORES DE SISTEMAS: NUESTRA CONFIGURACIÓN
En nuestra configuración, actualmente estamos configurados de la siguiente manera:
- CANAL DE RESÚMENES (DIGEST): sendgrid, “api: blah_blah_blah_11111_blah_bla”
- CANAL POR DEFECTO: sendgrid, “api: blah_blah_blah_2222_blah_blah”
- CANAL DE PRIORIDAD: Cuenta de Google Workspace
La razón de esto es que obtenemos muchas estadísticas importantes con sendgrid y estamos en el plan básico (no gratuito) por alrededor de 15 USD al mes, por lo que podemos enviar hasta 40,000 mensajes al mes, lo cual gestionamos activando y desactivando los resúmenes para asegurarnos de mantenernos por debajo del límite de 40K.
Utilizamos dos APIs diferentes de sendgrid para fines de seguimiento. Iba a configurar el “CANAL POR DEFECTO” con otro proveedor como “MailGun”, solo por diversión, pero aún no lo he hecho.
Utilizamos nuestra cuenta de Google Workspace porque nuestro foro de Discourse no tiene muchos usuarios que inicien sesión por correo electrónico y el volumen de registros es lo suficientemente bajo como para que Google no se queje; por lo que podemos ver fácilmente qué está ocurriendo con las notificaciones de correo electrónico de “alta prioridad”:
Recomiendo que los sitios con muchos registros, solicitudes de inicio de sesión por correo electrónico y otro “tráfico de notificaciones de correo electrónico de prioridad” NO utilicen Google Workspace (ni ninguna cuenta de Google) y usen otros proveedores de correo electrónico masivo como Sendgrid, MailGun, etc. Como mencioné, estamos en el plan básico (no gratuito) de sendgrid.
Dicho esto, tu configuración SMTP es “tuya” y no “mía”
así que configúrala como consideres “mejor para ti”.
MEJORAS FUTURAS
También hay cosas divertidas que podemos hacer, como agregar un “round robin” usando un generador de números aleatorios para equilibrar la carga de los correos de resumen (por ejemplo) entre varios proveedores. Modificando fácilmente este plugin, podríamos tener 3 o incluso 30 canales de correo electrónico y así ser muy creativos.
Además, podríamos revisar las excepciones de Jobs para nuestros mailers y, si hay un problema, podríamos marcar ese mailer (canal) y dejar de enviar correos a cualquier canal “marcado”, etc.
El cielo es el límite realmente; pero por ahora, no tengo planes inmediatos de agregar funciones de “round robin” o “deshabilitar canales defectuosos” a este plugin, ya que estoy ocupado con otras tareas.
Francamente (es mi culpa), no me dedico a la programación en EmberJS (en 2020, no estoy seguro de 2021, pero lo dudo…), por lo que no agregué ninguna nueva función de interfaz de usuario en esta versión, lo siento por eso. Me dedico más a la programación del lado del servidor, la administración de sistemas y las funciones relacionadas con la ciberseguridad (lado del servidor), como regla general; pero eso es solo yo. ¡Siéntete libre de enviar un PR con nuevo código de interfaz de usuario en Ember o bifurcar y modificar! Si decido agregar una nueva ruta para mostrar estos nuevos canales SMTP, lo más probable es que lo haga usando Bootstrap y jQuery, ya que (como mencioné), actualmente no me entusiasma la programación en EmberJS.
CAMBIAR O AGREGAR MÉTODOS ADICIONALES
La configuración actual del plugin para los “canales de prioridad” es completamente subjetiva, y estoy abierto a cambiarlos agregando otros métodos de clase de mailer a los “canales de prioridad”. Soy fácil de encontrar en internet ![]()
VER TAMBIÉN
NOTAS AL PIE
-
Los tres dominios principales de la ciberseguridad son los siguientes:
- Disponibilidad
- Confidencialidad
- Integridad
Este plugin está diseñado para mejorar el dominio de “disponibilidad” de la ciberseguridad de Discourse moviendo el tráfico SMTP de resúmenes de baja prioridad fuera del canal SMTP predeterminado; y moviendo el tráfico SMTP de “mayor prioridad” a un canal SMTP con poco tráfico (sin resúmenes, sin notificaciones de usuarios casuales).
SOPORTE DEL PLUGIN
La mejor manera de contactarme sobre soporte o solicitudes de funciones es publicar en este tema complementario:

