Uso correto do cabeçalho SMTP “Sender”?

20

Nosso aplicativo da Web envia mensagens de email para as pessoas quando alguém publica novo conteúdo. O remetente e o destinatário optaram por receber mensagens de email do nosso aplicativo. Ao preparar essa mensagem, definimos os seguintes cabeçalhos SMTP:

DE: [email protected]
PARA: destinatá[email protected]
ENVIO: [email protected]

Optamos por usar o endereço de e-mail do autor no cabeçalho FROM, na tentativa de fornecer a melhor experiência para o destinatário; quando a mensagem é exibida no cliente de email, o autor fica claro. Para evitar a aparência de falsificação, adicionamos o cabeçalho SENDER (com o endereço de email da empresa) para deixar claro que enviamos a mensagem em nome do autor. Depois de ler as RFCs 822 e 2822, esse parece ser o uso pretendido do cabeçalho do remetente.

A maioria dos servidores de recebimento de emails parece lidar bem com isso; a mensagem de email é entregue normalmente (supondo que a caixa de correio do destinatário exista, não tenha uma cota excessiva etc.). No entanto, ao enviar uma mensagem de um endereço em um domínio para um endereço no mesmo domínio, alguns domínios de recebimento rejeitam as mensagens com uma resposta como:

571 IP incorreto - psmtp (em resposta ao comando RCPT TO)

Acho que isso significa que o servidor de recebimento viu apenas que o endereço do cabeçalho FROM estava em seu próprio domínio e que a mensagem se originou de um servidor que não considerava autorizado a enviar mensagens para esse domínio. Em outras palavras, o servidor de recebimento ignorou o cabeçalho SENDER.

Temos uma solução alternativa: o aplicativo da web mantém uma lista desses domínios que parecem ignorar o cabeçalho SENDER e, quando os cabeçalhos FROM e TO estão nesse domínio, define o cabeçalho FROM como nosso próprio endereço de email. Mas esta lista requer manutenção.

Existe uma maneira melhor de obter a experiência desejada? Gostaríamos de ser um "bom cidadão" da rede, e todas as partes envolvidas - remetentes e destinatários - desejam participar e receber essas mensagens. Uma alternativa é sempre usar o endereço de e-mail da empresa no cabeçalho FROM e acrescentar o nome / endereço do autor ao assunto, mas isso parece um pouco desajeitado.

Eric Rath
fonte
Por que não usar em From: authorvez de From: [email protected]?
Pacerier 14/02

Respostas:

16

Você está olhando para as coisas erradas. Esses são os cabeçalhos da mensagem . Você deve olhar o envelope SMTP . (Como o envelope é especificado depende de como, exatamente, seu aplicativo está enviando correio para o sistema de correio. Em muitos sistemas, o envelope é especificado por argumentos de linha de comando para o programa utilitário de envio de correio.) Dependendo de exatamente quando na transação do protocolo decide emitir essa resposta 571, o servidor de retransmissão SMTP pode nem ter visto os cabeçalhos da mensagem.

O texto da resposta está dizendo que o administrador desse servidor de retransmissão SMTP específico com o qual você está falando restringiu o que você pode colocar no envelope SMTP. Parece estar reclamando da parte do destinatário do envelope. Mas pode ser adiar a validação do remetente do envelope até a especificação do primeiro destinatário; portanto, pode estar reclamando do remetente.

Observe que o remetente do envelope é para onde as mensagens de status de entrega são enviadas e você não deseja que elas sejam direcionadas a pessoas aleatórias em todo o mundo. (Afora o fato de que muitas pessoas não gostam disso, não faz sentido para mensagens de status de entrega para seu e-mail a ser retornado para ninguém além de você.) Especificar a si mesmo como o remetente envelope.

É errado exigir MXregistros de recursos, a propósito. Um servidor de retransmissão SMTP pode ser localizado Ae AAAAregistros de recursos na ausência de quaisquer MXregistros de recursos. Veja RFC 5321 § 5.1.

JdeBP
fonte
Eu verifiquei a RFC antes de implementar a verificação do registro MX e aprendi o mesmo: verifique se há um registro de fallback A na ausência de um registro MX. Vou dar uma olhada no envelope SMTP; Obrigado pela sugestão.
Eric Rath 11/01
Eu pesquisei o envelope SMTP, testei isso. Você está certo - presumi incorretamente que toda verificação de origem usaria o cabeçalho da mensagem "De", mas parece que o envelope foi usado.
Eric Rath
5

Posso estar errado, mas a causa mais provável do erro acima, especialmente no caso do Postini, é que os domínios nos quais você está sendo rejeitado têm uma política estrita de SPF. A maioria dos servidores de correio com verificação SPF verifica apenas o cabeçalho De:, eles não se importam com o cabeçalho Remetente.

Para verificar se é esse o caso, execute "dig + short TXT domain.com" em que domain.com é o que está fornecendo a mensagem de erro. Você deve receber algo como:

"v = spf1 mx -all"

A parte importante é o -all. Isso significa que o proprietário do domínio declarou que apenas enviará emails dos servidores que atuam como servidores de email; todos os outros emails serão rejeitados.

Felizmente, se esse for o caso, você pode verificar ativamente antes de enviar o email! Faça com que o WebApp faça uma verificação do SPF quando o usuário inserir seu endereço de email. Se houver uma política rígida, adicione o domínio à sua lista. Não há escassez de bibliotecas para todos os idiomas que podem fazer verificações de SPF.

Niall Donegan
fonte
Obrigado, é uma boa ideia. Eu verifiquei (com escavação) o punhado de domínios que já apresentaram o comportamento indesejado e alguns tinham registros SPF com ~ todos. Portanto, não é uma solução completa, mas acho que será difícil encontrar uma solução completa para esse problema. Eu acho que os outros estão aplicando a mesma lógica básica, mas sem armazenar / publicar as informações nos registros SPF.
Eric Rath
Sua ideia sugeriu outra verificação de validação para executar: o domínio do endereço deve ter um registro MX válido. Se alguém digitar incorretamente o endereço de e-mail e o erro cair na parte do domínio (por exemplo, pessoa@domínio.com), a entrega falhará porque nenhum registro MX pode ser encontrado para o domínio (supondo que o erro não tenha resultado em uma domínio diferente, mas ainda válido).
Eric Rath
Mudei o "respondedor aceito" para o JdeBP abaixo - a distinção entre o cabeçalho da mensagem e o cabeçalho do envelope realmente o acertou. Mas obrigado pelo feedback.
Eric Rath
5
Correção: o SPF verifica o "MAIL FROM" no envelope, não os cabeçalhos "From" ou "Sender".
Simon East