OK, así que estoy usando Mailjet para el SMTP y tengo un problema con la validación. En primer lugar, no puedo validar fácilmente el correo individual noreply@discourse.example.com.
Preferiría validar el dominio discourse.example.com, pero aquí me encuentro con dos problemas. Podría hacerlo con un archivo de texto con un nombre especial, pero parece que Discourse no lo permite (aunque en este punto me siento tentado a configurar el archivo de nginx para que devuelva algo en esa URL). Está bien, ¿quizás el archivo TXT de DNS? Y aquí tengo problemas porque administro el DNS del dominio example.com y me piden que agregue una entrada para esencialmente mailjet.discourse.example.com, que es un subdominio, y no tengo claro cómo ingresarlo. Estoy ejecutando Bind 9.3 aproximadamente en Ubuntu 16.04; cualquier orientación sería útil. Puedo encontrar información sobre cómo agregar una entrada TXT para discourse.example.com, pero Mailjet dice que no, tiene que ser mailjet_xxxxx.discourse.example.com, es decir, una subred, lo que creo que implica zonas adicionales. No soy un mago de DNS, aunque sé bastante bien instalar cosas complejas.
Pero ahora mismo estoy tan confundido por probar todo tipo de cosas, así que… ¿ayuda? Quiero decir, la mejor noticia posible sería que alguien dijera: “Por supuesto, puedes poner un archivo de texto en el directorio raíz de Discourse así…”
¿Estás al tanto de tu registrador de dominios o administrador de DNS?
Tendrás que crear la entrada DNS en el administrador de DNS proporcionado por el registrador o, si utilizas algo como Cloudflare, tendrás que crear los registros DNS allí.
¡OK, acabo de hacer que funcione el método de validación TXT, incluso con las «restricciones» de Discourse! Así que, si prefieres hacerlo para evitar meterte con cosas de DNS (lo cual, eeeeeeeeee… para mí da mucho más miedo que tocar un servidor web, aunque, por supuesto, a cada cual lo que le funcione).
Necesitarás poder editar el archivo de configuración de nginx de tu instalación de Discourse. Dónde esté exactamente depende de dónde y con qué hayas instalado Discourse. En mi caso, hice una instalación baremetal sin Docker. Lo encuentro en /etc/nginx/conf.d/discourse.conf — a ti puede variar.
En ese archivo habrá un bloque location como este:
location / {
....
}
y dentro habrá varias directivas location anidadas.
Crea una nueva, también anidada aquí (¡pero no anidada dentro de otra location!):
location /stupidfilename.txt {
alias /var/www/stupidfilename.txt;
}
Donde stupidfilename.txt es el nombre especial del archivo que te pidan añadir, y donde la ruta (/var/www) está fuera de los archivos de Discourse pero accesible para URLs en general en el servidor. Lo que hace que esto funcione es que / es la raíz para Discourse, así que la URL parecerá estar bajo tu Discourse: http://discourse.example.com/stupidfilename.txt (he añadido espacios para desactivar el enlace falso).
Así que… coloca el archivo fuera de Discourse, configura la location para que haga alias a él y reinicia nginx.
¡Tada…
(He vuelto atrás y editado esta respuesta para mejorar la legibilidad, etc., ya que la marqué como mi solución).