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!
أعتقد أن الخيار الأفضل لا يزال هو جعلهم يعيدون تعيين كلمة المرور الخاصة بهم من خلال رابط إعادة تعيين كلمة المرور. هل هناك سبب لعدم تمكن المستخدم الخاص بك من القيام بذلك؟
لا، ستكون مجرد مسألة تجربة مستخدم. لقد كنا نقوم بترحيل منتدانا القديم (vanilla forum) وأعتقد أن أفضل تجربة للمستخدمين القدامى ستكون تلقي بريد إلكتروني يقول “مرحبًا، لقد انتقلنا من منتدانا إلى منصة جديدة. يمكنك تسجيل الدخول عبر هذا الرابط: {link}”.
فقط للتصحيح هنا - هذا النص البرمجي يعمل بالفعل. كان علي فقط:\n\ncd /var/discourse\nsudo ./launcher enter app\n\n\nثم إنشاء الملف:\n\n// إنشاء ملف\ntouch password.rb\n\n\nثم إضافة الكود التالي:\n\nemail_token = nil\n\nUser.all.each do |u|\n email_token = u.email_tokens.create(email: u.email)\n Jobs.enqueue(:critical_user_email, type: :forgot_password, user_id: u.id, email_token: email_token.token)\n sleep(5)\nend\n\n\nوأخيرًا، تشغيله:\n\nrails r password.rb\n\n\nلقد نجح معي ."
آه، آسف، كان من المفترض أن أعود إلى هذا أمس عندما أدركت أنك أردت القيام بعملية جماعية وليس عملية فردية. يسعدني أنك اكتشفت الأمر على أي حال.
سأقوم بتقسيم هذه المشكلة لتسهيل العثور عليها في عمليات البحث المستقبلية.
مرحباً، لا أعرف ما إذا كان هذا لا يزال أفضل مكان لطرح هذا السؤال، ولكن هل تعرف كم من الوقت يستمر بريد إعادة تعيين كلمة المرور؟ أعرف أنه ينتهي بعد 3 أو 4 أيام ولكن أحتاج إلى معرفة ذلك لأنني سأدعو مستخدمي من منتدى قديم وأحتاج إلى إرسال رسالة لإعلامهم بأن البريد قد يكون منتهي الصلاحية بعد ن أيام لذا أحتاج إلى الوقت المحدد. شكراً
كيف يمكننا تشغيل هذا الأمر على أساس كل مستخدم على حدة أو فقط لقائمة المستخدمين في ملف نصي؟ لدي حوالي 8000 مستخدم لنقلهم. أقوم بإنشاء المستخدمين بشكل جيد باستخدام واجهة برمجة التطبيقات (API)، ولكن بعد ذلك لا يتم إرسال رسائل البريد الإلكتروني بسبب تحديد المعدل المبرمج مسبقًا. لقد قمت أيضًا بتعيين عنوان IP الخاص بي إلى ACCEPT في IP المُصفى، ولكن لا يزال الأمر لا يعمل. هل هذا شيء يمكن القيام به فقط في وحدة تحكم Rails؟
أعتقد أن استخدام برنامج نصي للاستيراد سيكون فكرة أفضل لإنشاء هذا العدد الكبير من المستخدمين، ولكن هذا خارج الموضوع
على أي حال، ستصل إلى الحد الأقصى للمعدل إذا أرسلت البريد الإلكتروني في البرنامج النصي أيضًا.
إذا كنت ترغب في إبطاء عملية إرسال البريد الإلكتروني، يمكنك إضافة sleep(x) (x بالثواني) في حلقة روبي (ruby)، ويجب تكييفها مع أي (أي) حدود للمعدل.
إذا كنت تنوي تشغيل البرنامج النصي الخاص بك لفترة من الوقت، فاستخدم مدير جلسات مثل screen أو 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
لا حاجة لإنشاء ملف روبي (Ruby) لهذا؛ يمكنك تشغيله في وحدة تحكم Rails (./launcher enter app ثم rails c).