Erros Inexplicáveis de Email::Receiver::InvalidPost

Semelhante a Mirrored mailing list is rejecting registered forum users

Não parece ser. O tópico referenciado parece ser um problema de permissão causado por configuração incorreta.

1 curtida

Minha culpa, peço desculpas pela perturbação.

Eu propus uma correção para o problema que encontrei, mas por tudo que encontrei até agora, o componente que estava realizando a alteração afeta apenas o registro salvo e não afeta o e-mail recebido durante o processamento.

Estou razoavelmente confiante de que a fonte do problema deve ser outra coisa, mas ainda não sei o que pode ser.

1 curtida

Como essa alteração foi mesclada, atualizei nossa instância do Discourse hoje e ficarei de olho nos logs de e-mails rejeitados nos próximos dias.

1 curtida

Desde a atualização, três novos erros InvalidPost foram registrados, mas os detalhes da rejeição são diferentes: todos os três erros mostram o corpo da mensagem correto (onde antes era mostrada a assinatura da lista de e-mails) e o motivo da rejeição agora é Access Denied.

Pelo menos isso é uma melhoria.

A razão do erro permanece com o usuário?

Você tem certeza de que o erro está incorreto? O usuário tem permissão para postar na categoria? O usuário está ativo?

Por um lado, o motivo não parece se sustentar: a conta está ativa, não suspensa nem silenciada. No entanto, notei que a conta não está “preparada” (staged), o que é o caso da maioria das contas cujas postagens da lista de e-mails acabam no Discourse. Todas as postagens de usuários não preparados são de membros da equipe de moderação.

Nossa categoria de espelhamento de lista de e-mails foi configurada inicialmente usando este guia: Mirroring a read-only mailing list in Discourse

No entanto, acabei de revisar as permissões configuradas na categoria e parece que nosso grupo de moderadores foi adicionado, e a \everyone\\ (todos) recebeu permissões de \reply\\ (responder).

Removi essas permissões extras e deixei apenas a \everyone\\ (todos) com a permissão de \see\\ (ver). Talvez essas permissões “extras” estejam interferindo na forma como o Discourse lida com essas categorias especiais de “espelhamento de lista de e-mails”?

O fato de o usuário não estar em “staged” (preparado/em espera) pode ser o problema. Usuários em “staged” não são verificados quanto à permissão para postar na categoria, mas usuários registrados são. Portanto, se o usuário não estiver em um grupo que tenha permissão para responder a tópicos na categoria, a resposta dele será rejeitada por falta de permissão. O mesmo se aplica a novos tópicos e à permissão de ‘criar’.

Há um tópico sobre este problema aqui: Category not accepting "anonymous email" from known users

1 curtida

No entanto, acabei de revisar as permissões configuradas na categoria e parece que nosso grupo de moderadores foi adicionado, e everyone recebeu permissões de reply.

Removi essas permissões extras e deixei apenas everyone com a permissão de see. Talvez essas permissões “extras” estejam interferindo na forma como o Discourse lida com essas categorias especiais de “espelho de lista de e-mails”?

Na verdade, esqueça isso, eu devo ter olhado para outra categoria, porque as permissões para a categoria de espelho de lista de e-mails estão como esperado: apenas everyone tem a permissão de see. Dito isto, minha observação de que postagens de usuários que não são moderadores nem estão em estágio parecem ser consistentemente rejeitadas.

[quote=“Moin, post:30, topic:377793”]O fato de o usuário não estar em estágio pode ser o problema. Usuários em estágio não são verificados quanto à permissão para postar na categoria, mas usuários registrados são. Portanto, se o usuário não estiver em um grupo que tenha permissão para responder a tópicos na categoria, a resposta dele será rejeitada por falta de permissão. O mesmo se aplica a novos tópicos e à permissão de ‘criação’.

[/quote]

Esta explicação definitivamente faz sentido com base no que estou vendo, mas se for esse o caso, este é definitivamente um comportamento inesperado e confuso: remetentes que postam na lista de e-mails espelhada, mas que por acaso já têm uma conta no Discourse com o endereço de e-mail associado, deveriam definitivamente ter permissão para postar em categorias onde a configuração “Esta categoria espelha uma lista de e-mails” está ativada.

1 curtida

O que seria incrível é se o Discourse pudesse persuadir/pagar alguém da equipe do Mailman (ou alguém semelhante) para melhorar a forma como o Discourse lida com e-mails.

1 curtida

Temos testes que garantem que o Discourse pode receber e-mail para categorias somente leitura que espelham uma lista de discussão:

Para suportar isso, as postagens enviadas para espelhos de lista de discussão ignoram algumas verificações:

    def create_post(options = {})
      …
      if sent_to_mailinglist_mirror?
        options[:skip_validations] = true
        options[:skip_guardian] = true
      else
        options[:email_spam] = is_spam?
        options[:first_post_checks] = true if is_spam?
        options[:email_auth_res_action] = auth_res_action
      end
    def sent_to_mailinglist_mirror?
      @sent_to_mailinglist_mirror ||=
        begin
          destinations.each do |destination|
            return true if destination.is_a?(Category) && destination.mailinglist_mirror?
          end

          false
        end
    end

A meu ver, algo relacionado à sua configuração pode estar criando uma condição em que o fato de ser um espelho de lista de discussão não é detectado? Observe que, para ignorar essas verificações, o e-mail deve ser enviado para o endereço de e-mail da categoria e não para o reply_by_email_address do site.

1 curtida

Ah, isso é interessante, e parece ser contrário à orientação postada aqui para configurar um espelho de lista de e-mails:

Assine a lista de e-mails usando seu endereço de e-mail do Discourse (por exemplo, discourse@example.com).

Verifiquei o endereço de e-mail inscrito em nossas listas de e-mails em nome do Discourse, e é de fato discourse@forum.torproject.org.

Eu deveria estar usando um endereço de e-mail diferente aqui? Se sim, qual?

Não, está tudo bem.

A parte que você pode estar perdendo é esta:

(lembre-se que o Discourse usa apenas os cabeçalhos da mensagem (Para/CC) e não conhece o endereço envelope-to)

Para a categoria tor-relays, eu tenho o Endereço de e-mail de entrada personalizado definido como tor-relays@lists.torproject.org, que acredito corresponder ao cabeçalho Para: dos e-mails enviados pelo Mailman.

1 curtida