I have migrated users from old forum database. Is there any way to send password reset e-mails in bulk? I’ve tried to use API but got You have performed this action too many times, try again later. after requesting to send about 3 reset emails… (other API actions work fine)
I’d be happy to use ruby console or API if you can please advise how to go around that rate limit. It is probably limit per IP address as I’ve investigated.
[updated]
Seems like RateLimiter for ‘forgot_password’ is unfortunately hardcoded so I went ruby script way…
For mass reseting (sending out tokens for password reset to all users) you can do
cd /var/discourse
./launcher enter app
Then create new file mass-password-reset.rb using your favourite editor with following script:
User.all.each do |u|
email_token = u.email_tokens.create(email: u.email)
Jobs.enqueue(:critical_user_email, type: :forgot_password, user_id: u.id, email_token: email_token.token)
sleep(5)
end
And then run it with rails r mass-password-reset.rb
Awesome, thanks! I recently migrated data from my old forum and when tried to manually reset passwords for my users (not too many of them), ran into error message. Discourse logs didn’t show anything, tried to rebuild app and it didn’t help. Then tried your script and now via outsourced email sending service (and Sidekiq) I see that these mails are sending out. So, thanks again!
Salut, as-tu trouvé une solution à ce problème ? J’étais sur le point d’essayer ce script, mais j’ai vu ton message et je me demande maintenant si tu as réussi à contourner le problème.
Je pense que la meilleure option est toujours de leur faire réinitialiser leur mot de passe via le lien de réinitialisation du mot de passe. Y a-t-il une raison pour laquelle votre utilisateur ne peut pas le faire ?
Non, ce serait juste une question d’expérience utilisateur. Nous avons migré notre ancien forum vanilla et je pense que la meilleure expérience pour les anciens utilisateurs serait de recevoir un e-mail disant « Hé, nous avons migré de notre forum vers une nouvelle plateforme. Vous pouvez vous connecter via ce lien : {link} ».
Ah désolé, j’ai voulu revenir là-dessus hier quand j’ai réalisé que vous vouliez faire une opération en masse et non une opération unique. Je suis content que vous ayez trouvé la solution.
Je vais diviser ce problème pour qu’il soit plus facile à trouver dans les recherches futures.
Salut, je ne sais pas si c’est toujours le meilleur endroit pour poser cette question, mais sauriez-vous combien de temps dure l’e-mail de réinitialisation de mot de passe ? Je sais qu’il expire dans 3 ou 4 jours, mais j’ai besoin de le savoir car je vais inviter mes utilisateurs d’un ancien forum et j’ai besoin d’envoyer un message les informant que l’e-mail peut expirer après n jours, j’ai donc besoin de l’heure précise. Merci
Comment exécutons-nous cette commande par utilisateur ou juste pour une liste d’utilisateurs dans un fichier texte ? J’ai environ 8000 utilisateurs à transférer. Je crée les utilisateurs sans problème avec l’API, mais ensuite les e-mails ne sont pas envoyés en raison de la limitation de débit codée en dur. J’ai également défini mon adresse IP sur ACCEPT dans la section IP filtrées, mais toujours rien. Est-ce quelque chose qui ne peut être fait que dans la console Rails ?
Je serais également intéressé par l’adaptation du script ci-dessus pour l’envoyer à 1 seul utilisateur, afin que je puisse le tester avant de l’envoyer à tout le monde.
Je pense qu’utiliser un script d’importation serait une meilleure idée pour créer autant d’utilisateurs, mais c’est hors sujet
Quoi qu’il en soit, vous atteindriez la limite de débit si vous envoyiez également l’e-mail dans le script.
Si vous souhaitez ralentir le processus d’envoi d’e-mails, vous pouvez ajouter un sleep(x) (x en secondes) dans la boucle ruby, et il doit être adapté à la ou aux limites de débit.
Si vous avez l’intention de laisser votre script s’exécuter pendant un certain temps, utilisez un gestionnaire de session tel que screen ou tmux.
user = User.find_by(username: 'alehandrof')
if user
email_token = user.email_tokens.create(email: user.email)
Jobs.enqueue(:critical_user_email, type: :forgot_password, user_id: user.id, email_token: email_token.token)
end
Il n’est pas nécessaire de créer un fichier Ruby pour cela ; vous pouvez l’exécuter dans la console Rails (./launcher enter app puis rails c).