Pour le premier email d’inscription, installé avec la dernière image Docker, mon serveur SMTP répond avec :
Code de retour inattendu 554 (250 attendu) :
« Accès refusé : l'utilisateur `arn:aws:iam::[acct]:user/[user]' n'est pas autorisé à effectuer `ses:SendRawEmail' sur la ressource `arn:aws:ses:us-west-1:[acct]:identity/[identity]' ».
Cependant, le fichier de log de Discourse production.log affiche ceci :
Démarrage de PUT "/finish-installation/resend-email" pour [ip] le 2020-11-16 à 20:58:10 +0000
Traitement par FinishInstallationController#resend_email en tant que HTML
Paramètres : ...
Terminé avec succès (200 OK) en 23 ms (Vues : 6,4 ms | ActiveRecord : 0,0 ms | Allocations : 6023)
...
Courrier livré [randid]@[hostname] (191,3 ms)
Il me semble que le site web, ou du moins les journaux, devraient renvoyer une erreur plutôt qu’un message de succès.
Généralement, les e-mails sont envoyés dans une file d’attente en arrière-plan, ce qui est invisible pour l’utilisateur.
Je suis toutefois ouvert à l’idée que l’assistant soit un peu plus élaboré et explicite en cas d’échec, mais cela nécessitera d’interroger le serveur pour le détecter. C’est probablement un changement assez important, je ne suis pas certain.
Pour l’assistant : il est acceptable que l’assistant n’affiche pas l’échec. Cependant, il ne doit pas non plus indiquer que l’e-mail a été envoyé avec succès. Une formulation plus proche de la réalité serait plus utile. S’il est trop difficile d’afficher le statut de retour, il vaudrait mieux indiquer : « L’e-mail d’inscription a été ajouté avec succès à la file d’attente. Vérifiez /path/to/log pour connaître le statut. »
Pour le journal : le thread worker doit enregistrer le statut, en particulier en cas d’erreur. Je ne connais pas l’architecture, mais je ne vois rien d’utile dans « unicorn.stderr.log » ou ailleurs. Quelque chose doit absorber le code de retour et le message d’erreur…
Après la connexion en tant qu’administrateur, les erreurs d’e-mail sont visibles depuis la console d’administration, ce qui indique qu’elles sont stockées dans la base de données et auraient pu être accessibles via celle-ci avant la fin de la première inscription d’un administrateur.
La table skipped_email_logs contient les informations que je recherchais.
Si vous êtes connecté au conteneur Discourse en tant qu’utilisateur discourse, vous pouvez exécuter :
psql discourse -c "select * from skipped_email_logs"