비공개 하위 카테고리 email-in: Discourse::InvalidAccess

Email-in Discourse::InvalidAccess 토론을 이어갑니다:

Discourse::InvalidAccess가 다시 발생했습니다. 이번에는 Subject의 길이가 원인이 아닙니다. 제한된 하위 카테고리인 것과 관련이 있을 것 같다는 의심을 하고 있습니다. 하지만 해당 카테고리는 계정이 없는 주소로부터의 이메일 수신을 허용하도록 설정되어 있으므로, 이메일이 전달되어 새 토픽이 생성되기를 기대했습니다.

해당 사용 사례는 CFP(발표 초청)입니다: 사람들이 메시지를 보낼 수는 있지만, 오직 조직자만 메시지를 읽고 토론할 수 있어야 합니다. 이는 Email in to a private category 에 설명된 경우와 다르다고 생각합니다.


관련 문서: Configuring incoming email to create new topics or group messages - Site Management - Discourse Meta

git pull(noop) 이후에 다시 빌드했는데, 이제 Postfix의 relay_domains에 두 번째 도메인이 추가된 상태로 정상적으로 동작하는 것 같습니다. 이 일련의 테스트를 하기 전에, 해당 변경 사항과 함께 오류는 더 이상 발생하지 않았지만, 이메일이 카테고리에서도, 오류 로그에서도 전혀 표시되지 않았습니다.

containers/mail-receiver.yml 파일에는 다음과 같은 내용이 있습니다:

POSTCONF_relay_domains: forum.example.net, example.net

(물론 example.net은 실제 설정 파일에 있는 값이 아닙니다. 설정 파일에는 포럼의 호스트명과 상위 도메인 이름이 들어 있으며, 둘 다 DNS에 설정되어 있습니다.)

@mpalmer가 몇 년 전에 두 번째 도메인을 추가하는 것이 가능하지만, 라고 언급한 것을 기억합니다.

따라서 작은 relay_domains 설정만으로는 충분하지 않을 것이라고 예상했지만, 다시 빌드하기 전에 git pull을 수행한다면 동작하는 것 같습니다. mail-receiver 컨테이너가 빌드되는 방식에는 pupps를 업데이트하지 못하는 _어떤 특이점(quirk)_이 있을 것입니다…

어딘가에서 실패가 다시 발생했습니다. 이전 테스트는 정상적으로 통과했기 때문에 이는 다소 황당합니다. 이제 다시 재빌드한 후에도 수신된 이메일이 거부되고 있습니다. git pull을 수행한 뒤 rebuild를 실행하는 과정을 반복해 보았지만, 이번에는 효과가 없었습니다.

하위 카테고리 관련 상황이 영향을 미치고 있다고 의심합니다. 아니면 카테고리 권한과 관련하여 수신 이메일 처리 방식에 _무언가 변경_되었을 수도 있습니다.

현재 상황은 사람들이 이메일을 보내면 거부 메일을 받게 되므로, 제가 거부된 이메일을 복사하여 원본 게시자에게 주제를 재할당해야 하는 것입니다. 따라서 '사용자 경험’은 매우 나쁘며, 이로 인한 부하도 상당히 거슬립니다.

수신 이메일이 공개 카테고리라는 것을 진정으로 받아들이기 어렵습니다. 이는 CFP(공개 포럼)를 진행하는 것의 핵심 목적이기 때문입니다. 하지만 Discourse는 이제 이 목적을 충족하지 못하는 것 같습니다. :cry:

거절된 이메일은 이미 계정이 있는 사용자들로부터 온 것인가요?

일부는 그렇습니다.

계정이 없는 사용자로부터 온 이메일은 거부됩니다(하지만 해당 카테고리는 계정이 없는 주소로부터의 이메일 수신 으로 설정되어 있습니다).

인가된 그룹에 속한 사용자로부터 온 이메일은 정상적으로 수신되는 것으로 보입니다.

계정은 있지만 해당 카테고리에 대한 접근 권한이 없는 사용자로부터 온 이메일은 거부됩니다.

기본 허용 설정에도 불구하고 권한이 확인되고 있는 것으로 보입니다.

현재 메일 수신기 컨테이너 코드를 검토 중이며, 거기서 원인을 찾을 수 있는지 확인하고 있습니다.

계정은 있지만 해당 카테고리 접근 권한이 없는 사용자의 경우, 게시물이 거부되는 것이 정상적인 동작입니다. 계정이 없는匿名用户로부터의 이메일 허용 설정은 임시(staged) 사용자에게만 적용되며, 기존 계정이 있는 사용자에게는 카테고리 권한이 적용됩니다.

계정이 없는 사용자들이 거부되고 있다는 점은 다소 이상합니다. 이는 메일 수신기에 적용한 변경 사항 때문일 수 있을까요?

그렇다면 거부 처리는 /admin/email/smtp_should_reject.json 엔드포인트에서 이루어지는 것 같습니다.

이메일이 바운스(bounce)되고 있어서 변경을 했습니다. 처음에는 수신 이메일 주소에 여러 이메일을 추가하고(세로선 |로 구분) 시도했는데, 잘 작동하는 것 같았습니다.

네, 이해가 갑니다. 하지만 약간 혼란스럽네요. “누구나” 이메일을 보낼 수 있지만 기존 사용자는 보낼 수 없다면, 그 목적이 다소 무색해집니다.

거부된 이메일이 스테이징 상태인지 아닌지 확인해 보겠습니다. 디버깅을 도와주셔서 정말 감사합니다 @JammyDodger.

제 생각에는 @JammyDodger님이 맞으신 것 같습니다. 단계별(staged) 사용자는 통과하고, 해당 카테고리에 대한 일반 접근 권한이 있는 기존 사용자는 통과하지만, 접근 권한이 없는 기존 계정은 카테고리에 이메일을 보낼 수 없습니다.

우회 방법으로, 해당 카테고리에 대한 알림이 없는 CFP 그룹을 만들어 기존 사용자 전체를 포함시키는 방법이 있겠습니다. 하지만 매우 해킹적인 방식처럼 들리며, 기존 알림이 취소되는 등의 부수적인 문제가 생길 수도 있습니다… 어떻게 해야 할지 모르겠습니다.

그것이 유용할 수 있다면, 사람들은 그룹으로 이메일을 보내는 것을 대안으로 사용하는 것 같아요.

그건… 아마 이렇게 하는 게 맞을 것 같습니다.

음소거(muted)된 카테고리를 가진 그룹이 같은 카테고리를 감시(watching)로 설정한 다른 그룹보다 우선순위가 있는지 아시나요?

요약하면 다음과 같습니다:

  • 기존 계정에 속하지 않는 이메일 주소(즉, _스테이징 사용자_로 알려진)에 대한 이메일 수신(email-in)이 허용된 비공개 카테고리가 주어졌을 때

→ 알 수 없는 주소에서 이메일이 수신되면: 해당 이메일은 비공개 카테고리에 전달됩니다.
→ 알려진 주소에서 이메일이 수신되면: 해당 사용자가 카테고리에 액세스할 권한이 있는 그룹의 구성원인 경우에만 이메일이 전달됩니다.

따라서 CFP(컨퍼런스 발표 제안서)에 이메일 수신을 사용하려면, 비공개 그룹의 이메일 수신 주소를 설정하여 해당 주소를 사용하세요. 메시지는 “공개” 처리되어 카테고리(비공개 또는 공개)의 주제로 전환될 수 있습니다.