# Send password reset emails in bulk?

**URL:** https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012
**Category:** Support
**Created:** [2월 5, 2018, 11:21오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012 "2018-02-05T11:21:04Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![Overgrow](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/overgrow/32/478189_2.png) [@Overgrow](https://meta.discourse.org/u/Overgrow)
#### Post date: [2월 5, 2018, 11:21오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/1 "2018-02-05T11:21:04Z")

</div>

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`

---

<div class="post-metadata">

### Author: ![krizdabz](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/krizdabz/32/96020_2.png) [@krizdabz](https://meta.discourse.org/u/krizdabz)
#### Post date: [5월 6, 2018, 9:44오후 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/2 "2018-05-06T21:44:52Z")

</div>

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! 🙂

---

<div class="post-metadata">

### Author: ![jonbartlett](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonbartlett/32/120558_2.png) [@jonbartlett](https://meta.discourse.org/u/jonbartlett)
#### Post date: [12월 6, 2019, 11:10오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/3 "2019-12-06T11:10:37Z")

</div>

이 방법을 시도해 보았지만, 데이터 모델이 이제 변경되었습니다(보조 이메일 주소 때문인 것 같습니다). 이메일 주소는 이제 User Email 객체에 있는 것 같습니다.

---

<div class="post-metadata">

### Author: ![CarlosDaniel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/carlosdaniel/32/273223_2.png) [@CarlosDaniel](https://meta.discourse.org/u/CarlosDaniel)
#### Post date: [10월 4, 2022, 1:29오후 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/4 "2022-10-04T13:29:35Z")

</div>

안녕하세요, 이 문제를 해결할 수 있었나요? 그 스크립트를 시도해보려던 참인데, 메시지를 보고 우회할 수 있었는지 궁금해집니다.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [10월 4, 2022, 1:50오후 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/5 "2022-10-04T13:50:16Z")

</div>

제 생각에는 여전히 비밀번호 재설정 링크를 통해 비밀번호를 재설정하도록 하는 것이 최선의 방법입니다. 사용자가 이렇게 하지 못하는 이유가 있나요?

---

<div class="post-metadata">

### Author: ![CarlosDaniel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/carlosdaniel/32/273223_2.png) [@CarlosDaniel](https://meta.discourse.org/u/CarlosDaniel)
#### Post date: [10월 4, 2022, 2:02오후 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/6 "2022-10-04T14:02:05Z")

</div>

아니요, 그것은 단순히 사용자 경험의 문제일 것입니다. 저희는 기존 바닐라 포럼을 이전하고 있으며, 기존 사용자들에게 최상의 경험을 제공하려면 "안녕하세요, 포럼에서 새로운 플랫폼으로 이전했습니다. 이 링크를 통해 로그인할 수 있습니다: {link}"라는 이메일을 보내는 것이 가장 좋다고 생각합니다.

---

<div class="post-metadata">

### Author: ![CarlosDaniel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/carlosdaniel/32/273223_2.png) [@CarlosDaniel](https://meta.discourse.org/u/CarlosDaniel)
#### Post date: [10월 5, 2022, 11:04오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/7 "2022-10-05T11:04:58Z")

</div>

여기서 바로잡겠습니다 - 해당 스크립트는 실제로 작동합니다. 저는 다음을 수행해야 했습니다:

```plaintext
cd /var/discourse
sudo ./launcher enter app

```

그런 다음 파일을 생성했습니다:

```plaintext
// 파일 생성
touch password.rb

```

그리고 다음 코드를 추가했습니다:

```plaintext
email_token = nil

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

```

마지막으로 실행했습니다:

```plaintext
rails r password.rb

```

제 환경에서는 잘 작동했습니다 🙂."}

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [10월 5, 2022, 11:25오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/8 "2022-10-05T11:25:23Z")

</div>

아, 죄송합니다. 일괄 처리를 원하시는 건지 싱글턴인지 어제 확인했을 때 이 주제로 다시 돌아오려 했었거든요. 그래도 알아서 해결하셨다니 다행입니다. 🙂 👍

이 이슈를 분리해서 앞으로 검색할 때 더 쉽게 찾을 수 있도록 하겠습니다. 🔎

---

<div class="post-metadata">

### Author: ![CarlosDaniel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/carlosdaniel/32/273223_2.png) [@CarlosDaniel](https://meta.discourse.org/u/CarlosDaniel)
#### Post date: [10월 10, 2022, 10:09오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/9 "2022-10-10T10:09:03Z")

</div>

안녕하세요, 이 질문을 하는 것이 여전히 적절한 곳인지 모르겠지만, 비밀번호를 잊어버렸을 때 받는 이메일의 유효 기간이 얼마나 되는지 혹시 아시나요? 3일 또는 4일 후 만료된다는 것은 알고 있지만, 옛날 포럼에서 사용자들을 초대해야 해서 이메일이 n일 후 만료될 수 있다는 내용을 알리는 메시지를 보내야 합니다. 따라서 정확한 시간을 알고 싶습니다. 감사합니다.

---

<div class="post-metadata">

### Author: ![dennisjbr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dennisjbr/32/444916_2.png) [@dennisjbr](https://meta.discourse.org/u/dennisjbr)
#### Post date: [11월 6, 2024, 9:47오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/10 "2024-11-06T09:47:54Z")

</div>

이 명령어를 사용자별로 실행하거나, 텍스트 파일에 나열된 사용자 목록에 대해서만 실행하는 방법은 무엇인가요? 약 8,000명의 사용자를 이관해야 합니다. API를 통해 사용자를 생성하는 것 자체는 잘 되고 있지만, 하드코딩된 레이트 리미팅 때문에 이메일이 발송되지 않습니다. 또한, 스크리닝된 IP 목록에 제 IP 주소를 ACCEPT로 설정해 두었지만 여전히 작동하지 않습니다. 이 작업은 레일즈 콘솔에서만 수행할 수 있는 것인가요?

감사합니다!

---

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [1월 8, 2025, 11:17오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/12 "2025-01-08T11:17:24Z")

</div>

위 스크립트를 1명의 사용자만에게 보내는 방식으로 수정해서 테스트해 보고 싶기도 합니다. 그렇게 하면 전체 배포 전에 먼저 확인해 볼 수 있을 것 같아서요.

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [1월 8, 2025, 12:24오후 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/13 "2025-01-08T12:24:56Z")

</div>

> [@dennisjbr](#):
>
> 이전으로 가져올 사용자가 약 8,000명 있습니다. API를 통해 사용자를 생성하는 것은 잘 되고 있습니다.

그렇게 많은 수의 사용자를 생성하는 것에는 [수입 스크립트](https://github.com/discourse/discourse/tree/main/script/import_scripts)를 사용하는 것이 더 나은 아이디어일 것 같지만, 이는 주제에서 벗어난 이야기입니다 🙃  
어쨌든, 스크립트에서 이메일도 함께 보내면 속도 제한(rate limit)에 도달하게 될 것입니다.

이메일 전송 프로세스를 늦추고 싶다면, ruby 루프에 `sleep(x)` (x는 초 단위)를 추가할 수 있으며, 이는 해당 속도 제한에 맞게 조정되어야 합니다.

스크립트를 장시간 실행할 예정이라면 [screen](https://en.wikipedia.org/wiki/GNU_Screen)이나 [tmux](https://en.wikipedia.org/wiki/Tmux)와 같은 세션 관리자를 사용하세요.

> [@alehandrof](#):
>
> 위 스크립트를 단 1명의 사용자에게만 보내도록 수정하는 방법에도 관심이 있습니다.

```rb
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`)에서 실행할 수 있습니다.

---

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [1월 9, 2025, 8:28오전 UTC](https://meta.discourse.org/t/send-password-reset-emails-in-bulk/241012/14 "2025-01-09T08:28:08Z")

</div>

@Canapin님, 도움 주셔서 감사합니다!
