«unrevoke» 이메일 및 철회된 이메일의 미송 메시지 기록

사용자와 함께 이메일 미수신 문제를 해결하던 중 해당 계정에 기록된 “이메일 취소”(revoke email) 작업을 발견했습니다. 이 작업을 취소하거나 되돌릴 수 있는 방법이 있을까요?

또한: 사용자의 이메일이 취소(revoke)된 경우, 이는 “이메일 발송”(Email Sent) 또는 “이메일 건너뛰기”(Email Skipped) 로그에 반영되나요? 아니면 “이메일 취소”(Revoke Email) 작업에만 기록되나요?

What does ‘revoke email’ action mean in Logs? 토론을 이어갑니다:

이메일 해지 작업은 사용자에게 보낸 여러 이메일이 바운스(전달 실패)될 때 트리거됩니다. 이메일이 바운스될 때마다 사용자의 '바운스 점수(bounce score)'는 사이트의 soft bounce score 또는 hard bounce score 설정 값만큼 증가합니다. 사용자의 바운스 점수가 사이트의 bounce score threshold 설정 값(기본값: 4)에 도달하면 이메일 해지 작업이 트리거됩니다.

사용자 관리 페이지로 이동하여 페이지 상단의 ‘Bounce Score’ 행에 있는 ‘Reset’ 버튼을 클릭하면 이 작업을 되돌릴 수 있습니다.

Reset 버튼을 클릭하지 않으면, reset bounce score after days 설정으로 지정된 기간이 지난 후 Discourse가 사용자의 바운스 점수를 자동으로 초기화합니다. 이 설정의 기본값은 30일입니다. 해당 기간이 지나면 Discourse는 사용자에게 다시 이메일을 보내기 시도합니다.

사이트의 bounce score threshold를 초과한 사용자에게 이메일이 전송되지 않으면, Skipped 로그에 항목이 추가됩니다. Skip Reason은 'Exceeded bounce_score_threshold’로 설정됩니다.

감사합니다. 그렇다면 최근 User X에게 보낸 이메일 메시지의 Skipped 로그에 "Exceeded bounce_score_threshold"가 표시된다면, 그 사용자에 대해 이전에 “revoke email”(이메일 사용 중지) 조치가 이루어졌다고 가정할 수 있고, 그 반대도 성립하는 건가요?

상황은 이렇습니다. 제 사용자 중 한 명이 저희 Discourse 인스턴스에서 이메일을 받지 못하고 있습니다. 해당 사용자는 기술력이 뛰어나 스팸 폴더 등을 확인했다는 보고를 믿을 수 있습니다. 저는 꽤 오래전에 그의 bounce score를 초기화했지만, 오늘 그의 로그에서 Revoke Email 항목을 우연히 발견했습니다.

흥미롭네요. 저는 이메일이 아직 비활성화되지 않은 사용자(예: Mailman의 작동 방식처럼)에 대해서는 바운스 점수가 초기화될 거라고 생각했습니다. 아마 이 설정을 10년 정도로 두는 것이 가장 가까운 방법일 것 같네요!

제가 파악한 바로는, Discourse는 항상 사용자의 바운스 점수를 초기화한 후 해당 사용자에게 이메일을 다시 전송을 시도합니다. 일시적 바운스와 영구적 바운스 처리 방식의 유일한 차이점은, 영구적 바운스가 기본값 1(soft bounce score 사이트 설정에 의해 설정됨)이 아니라 기본값 2(hard bounce score 사이트 설정에 의해 설정됨)만큼 바운스 점수를 증가시킨다는 것입니다.

그렇게 하면 해결되지만, 의도하지 않은 결과가 발생할 수 있습니다. 예를 들어, 최근 Gmail 장애로 인해 bounce score threshold를 초과한 사용자는 바운스 점수가 자동으로 초기화되기를 10년간 기다려야 할 것입니다.

Mailman 2는 바운스(bounce) 설정/임계값의 기본값이 더 높지만, 한 번 임계값에 도달하면 구독이 해지됩니다. 양쪽의 논리 모두 이해할 수 있습니다. 수정: 세부 사항은 기억나지 않지만, 어느 시점에 관리용 이메일에 회신할 기회가 주어지고, 이를 통해 바운스 점수가 초기화되어 목록에 남을 수 있다고 생각합니다.

Discourse를 셀프호스팅하는 많은 사람들이 Mailgun을 사용하는데, Mailgun은 "영구 실패(permanent fail)"가 한 번만 발생해도 해당 이메일 주소를 억지(suppression) 목록에 유지하므로, Discourse의 더 관대한 접근 방식을 무시하게 됩니다.

아마도 Mailgun API를 사용하여 해당 억지 목록을 가져오는 것이 가능하다고 하며, Discourse 설정과 동기화하는 것도 가능할 것 같습니다.

오늘 구글로부터 누군가가 제 비밀번호를 취득했다는 명확한 이메일을 받았습니다 — “구글은 다른 사람이 사용자의 비밀번호를 알고 있다는 것을 인지했습니다” — 그래서 이것이 "장애(outage)"와 관련이 있는지 궁금합니다…

방금 이 링크를 발견했습니다: Configure VERP to handle bouncing e-mails - #166

이것은 bounce_score_threshold_deactivate 설정이 제거된 것에 관한 것입니다. 이것이 실수였는지 궁금합니다. 기본 설정에 도달하기가 어려웠다면, 그 설정 값을 낮추면 되는 문제였습니다.

대규모 포럼에서 해당 설정을 제거한 것의 의도하지 않은 결과 중 하나는, 수년에 걸쳐 점점 더 많은 무효 주소로 이메일을 정기적으로 보내려는 시도인 것 같습니다. 이는 외부 서비스(예: 단일 permanent fail 바운스 후 주소를 억제하는 Mailgun)와의 문제나 IP 평판 문제로 이어질 수 있습니다.

현재로서는, 제가 오해하지 않는 한, Discourse는 이메일을 보내고 있다고 생각하지만, Mailgun은 억제 목록 때문에 해당 이메일을 보내기를 거부하고 있을 뿐입니다. 그리고 Discourse의 접근 방식과 Mailgun의 접근 방식을 동기화하는 것은 불가능합니다.

그 부분에 대해 잊고 있었습니다. bounce_score_threshold_deactivate 설정이 Discourse가 유효하지 않은 주소로 이메일을 보내려는 시도를 방지하는 데 제대로 작동했는지 확실하지 않습니다. 문제는 사용자가 바운스 점수 임계값(bounce score threshold)에 도달하면, 바운스 점수 리셋까지 대기일(reset bounce score after days) 설정에 지정된 기간이 지나기까지 Discourse가 해당 사용자에게 이메일을 보내지 않는다는 점입니다. 그 시점이 되면 사용자의 바운스 점수가 초기화되고 이 과정이 다시 반복됩니다.

이에 대한 최선의 해결책이 무엇인지 확신이 서지 않습니다. 제 이해가 맞다면, 시간이 지날수록 Discourse 사이트가 점점 더 많은 유효하지 않은 주소로 이메일을 보내려는 시도를 하게 될 것으로 보입니다.

이 문제는 최소 두 가지 측면이 있습니다. 하나는 이메일 발신자(예: localhost)가 이 방식을 따를 것이라고 가정할 때, Discourse에 좋은 정책이 무엇인지입니다. 다른 하나는 이 방식을 따르지 않는 이메일 전송 서비스(예: Mailgun)와 어떻게 동기화할 것인가입니다.

Discourse에는 이미 "이메일 주소를 확인해 주세요. 해당 주소로 전송하는 데 문제가 발생했습니다."라는 유사한 메시지가 존재합니다. 아마도 Discourse는 반송되는 이메일을 비활성화하는 더 적극적인 접근 방식과, 이메일 전송 불가에 대한 제거할 수 없는 사이트 공지 기능이 필요할 것입니다.

외부 발신자와의 동기화는 더 어려울 것입니다. Mailgun은 API를 통해 억제 목록(suppression list)을 가져올 수 있다고 말하지만, API를 통해 주소를 삭제할 수도 있는지 아직 알지 못합니다. 양쪽 모두를 수행할 수 있다면 Discourse는 주소가 억제 목록에 들어오는 즉시 해당 주소를 비활성화하고, 관리자나 사용자가 Discourse 내에서 수동으로 조치를 취할 때(예: 확인 이메일에 답장) 억제 목록에서 해당 주소를 제거할 수 있습니다. 이 문제와 연결된 또 다른 문제는 각 제공업체마다 규칙이 다를 가능성이 높다는 것입니다.

수정: Mailgun API를 사용하여 억제 목록에서 이메일 주소를 삭제할 수 있으므로 위의 취소선 표시를 추가했습니다: https://documentation.mailgun.com/en/latest/api-suppressions.html#delete-a-single-bounce