Temos um fluxo de trabalho onde usamos o Discourse como um arquivo de e-mail. Temos um endereço de e-mail de grupo, e nossos agentes copiam esse endereço ao iniciar um tópico de e-mail com um cliente.
Isso funciona bem até que um cliente responda especificamente ao agente, ignorando todos os cabeçalhos Cc e até mesmo Reply-To. O agente então deve encaminhar o e-mail (reenviar) para o endereço de e-mail do grupo. O encaminhamento é o método preferido aqui, para que o Discourse arquive o e-mail original, incluindo todos os cabeçalhos originais, timestamps, etc.
Encaminhar um e-mail é feito copiando a mensagem exata e adicionando os cabeçalhos Resent-From e Resent-To. Estes são infelizmente ignorados pelo Email::Receiver. Ele deveria simplesmente anexar todos os Resent-* aos campos regulares respectivos.
Comecei a implementar isso e cheguei a fazer o create_incoming_email levar os campos em consideração. Eu então pude ver os e-mails, incluindo destinatários retirados do Resent-To, na lista de e-mails recebidos no Discourse.
No entanto, o que não consigo é fazer o get_all_recipients também honrar os campos Resent-*. Adicionei resent-to resent-cc resent-bcc ao array %i() dos campos de e-mail, mas ainda assim não parece retornar os destinatários desses campos.
Qualquer ajuda é bem-vinda, para que eu possa fazer um PR para essa mudança!
E como exatamente isso acontece? E se o reencaminhador simplesmente mentir e fabricar completamente um e-mail que supostamente foi enviado apenas para ele?
E como exatamente isso acontece? E se o remetente simplesmente mentir e fabricar completamente um e-mail que supostamente foi enviado apenas para ele?
Então eles poderiam muito bem omitir todo o conteúdo Resent- e simplesmente falsificar a coisa em primeiro lugar, sem alegar que foi enviada primeiro para eles.
Eu acho que você tem uma imaginação errada do que os cabeçalhos Resent- fazem - que, na verdade, não fazem absolutamente nada. Eles também não são levados em consideração quando os servidores de e-mail verificam SPF ou DKIM, então falsificar um e-mail reenviado é tão difícil quanto falsificar o e-mail original.
No meu caso, um e-mail reenviado de um estranho externo seria bloqueado pelo filtro de spam por violação de SPF. A razão pela qual meu cenário com agentes reenviando e-mails para o Discourse funciona é que eles são isentos dessas verificações após se autenticarem em nosso servidor de e-mail.
Permitir que o Discourse use o cabeçalho Resent-To é, portanto, nada mais do que um recurso de conveniência, porque é assim que os clientes de e-mail regulares criam uma cópia falsificada de um e-mail que receberam anteriormente. Isso não muda nada sobre a autenticação.