사용자 이메일 도메인이 너무 많아 작동하지 않아 Mailgun 도메인이 비활성화되었습니다: 어떻게 해야 하나요?

안녕하세요!

저희 포럼에는 더 이상 작동하지 않는 특정 이메일 도메인을 가진 대량의 가져온(imported) 사용자들이 있습니다.
수천 명의 사용자가 이러한 이메일 주소를 가지고 있습니다.

지금까지는 문제가 없었지만, suppress digest email after days 값을 증가시켰고, 그 결과 포럼에서 많은 다이제스트 이메일을 발송하게 되었습니다. 여기에는 작동하지 않는 이메일 도메인을 가진 많은 사용자들도 포함되어 있었습니다.

이로 인해 바운스(bounce)가 너무 많이 발생하여 Mailgun이 저희 도메인을 비활성화했습니다.

이 문제를 방지하고 해결하기 위해 이러한 계정들에 대해 어떻게 해야 할까요? 이 계정 중 많은 부분이 아직 포럼에 복귀하지 않은 합법적인 사용자들의 것이므로, 반드시 방치된 계정이라고 볼 수는 없습니다.

이 문제로 인해 문제가 해결될 때까지 사용자들은 포럼에 가입할 수 없습니다.

이메일 바운스 처리하기를 확인해 보세요.

왜인지 모르겠지만 검색으로 이 주제를 찾지 못했어요… 아마도 당황했던 것 같아요! :sweat_smile:

빠른 답변 정말 감사합니다!

하지만 bademail.domain와 같은 이메일 주소가 수천 개 있다면, 다음과 같은 작업을 수행하는 것이 더 적합할 수 있습니다.

rake posts:remap['bademail.domain', 'no-email.invalid']

이는 https://meta.discourse.org/t/replace-a-string-in-all-posts/48729에서 설명된 내용입니다. 이렇게 하면 해당 이메일 주소 모두에 대해 Discourse가 더 이상 메일을 보내지 않게 됩니다. 또 다른 좋은 해결책은 다음과 같은 코드를 사용하여 알려진 잘못된 이메일 주소를 가진 모든 사용자를 비활성화하는 것입니다.

bad=User.find_by_email     <모든 사용자를 검색하는 쿼리>
bad.update_all(active: false)

첫 번째 부분의 정확한 작성 방법은 바로 떠오르지 않지만, 충분히 쉽게 알아낼 수 있을 것입니다.

네, 이 이메일 도메인을 제거하기 위해 이렇게 해볼까 하고 생각했습니다.

Discourse 메서드가 @no-email.invalid 이메일을 생성하는 것을 확인했습니다:

그리고 임포터 베이스에서는 @email.invalid을 사용하는데, 약간 다릅니다:

  1. Discourse가 이메일을 보내야 할 때 이 두 개의 다른 "더미 도메인"이 모두 무시됩니까?

  2. 작동하지 않는 도메인을 @no-email.invalid 또는 @email.invalid로 교체해야 하나요, 아니면 상관없나요?

@pfaffman, 왜 게시물에서 리매핑해야 사용자 이메일을 변경하는 것보다 나은지 이해가 잘 안 됩니다… :thinking: 이 이메일 주소는 게시물에 없는데, 제가 무언가를 놓치고 있는 건지 모르겠습니다.

만약 이것이 권장되는 방법이라면, 각 프로필의 @brokendomains.com 주소를 @no-email.invalid 또는 @email.invalid로만 교체하고 싶습니다. 어떻게 해야 하는지는 알아낼 수 있으니, 어떤 “가짜” 도메인을 사용해야 하는지 궁금할 뿐입니다.

posts:remap이 모든 테이블에 걸쳐 해당 도메인을 리맵하는 것으로 꽤 확신합니다. 하지만 어떤 클래스에 넣어두어야 했기 때문이죠.

UserEmails 테이블(또는 그 이름이 무엇이든)에 직접 대체 코드를 작성하는 것도 방법입니다.

whatever.invalid이 The World에 해당 주소가 잘못된 주소임을 알리고, 전송을 시도하지 않을 것으로 꽤 확신합니다.

좋네요. 그러면 이 코드가 작동할까요?

User.find_each do |u|
	if u.email.include? "@brokendomain.com"
		u.update(email: SecureRandom.hex + "@email.invalid")
	end
end

나는 이렇게 할 수도 있을 것 같다

UserEmail.where("email like '%@brokendomain.com'").each do |e|
   e.update(email: SecureRandom.hex + "@email.invalid)
end

너의 방법도 작동할 수 있지만, 이메일을 다른 모델/테이블로 이동한 후 u.email.include?를 사용할 수 있도록 User 모델이 업데이트되었는지는 확신이 서지 않는다.

목표 이메일 주소가 반환되는지 확인하려고 내 스크립트를 실행해 봤고, 잘 작동합니다.

모든 사용자를 순회하는 대신 쿼리를 사용해 특정 이메일 도메인을 선택하니까, 당신의 스크립트는 제 것보다 더 빠를 것 같습니다.

도와주셔서 정말 감사합니다 :+1:

아, 실수했습니다. 제가 의도했던 리맵은 이겁니다. 그냥

  discourse remap old new

를 실행하면 됩니다.

Change the domain name or rename your Discourse 를 참고하세요.

위 방법이 작동할 것 같지만, UserEmails 솔루션이 약간 더 나은 해결책일 수 있습니다.

감사합니다. 제가 사용한 것이 바로 이 방법입니다.
총 17,000명 중 5,000명 이상의 사용자가 해당 이메일 도메인을 사용하고 있었습니다. suppress digest email after days 설정을 늘렸을 때 바운스 수가 많았던 것도 당연하네요…

.invalid로 끝나는 모든 항목에 대해 Discourse가 적용하는 특별한 처리입니다. .invalid는 예약된 TLD입니다.