Utilisation correcte de l'en-tête SMTP «Expéditeur»?

20

Notre application Web envoie des e-mails aux utilisateurs lorsque quelqu'un publie un nouveau contenu. L'expéditeur et le destinataire ont choisi de recevoir des e-mails de notre application. Lors de la préparation d'un tel message, nous définissons les en-têtes SMTP suivants:

DE: [email protected]
À: [email protected]
SENDER: [email protected]

Nous avons choisi d'utiliser l'adresse e-mail de l'auteur dans l'en-tête FROM afin de fournir la meilleure expérience au destinataire; lorsqu'ils voient le message dans leur client de messagerie, l'auteur est clair. Pour éviter l'apparence d'usurpation d'identité, nous avons ajouté l'en-tête SENDER (avec notre propre adresse e-mail d'entreprise) pour indiquer clairement que nous avons envoyé le message au nom de l'auteur. Après avoir lu les RFC 822 et 2822, cela semble être une utilisation prévue de l'en-tête de l'expéditeur.

La plupart des serveurs de messagerie récepteurs semblent bien gérer cela; l'e-mail est remis normalement (en supposant que la boîte aux lettres du destinataire existe, ne dépasse pas le quota, etc.). Cependant, lors de l'envoi d'un message à partir d'une adresse dans un domaine vers une adresse dans le même domaine, certains domaines de réception rejettent les messages avec une réponse comme:

571 IP incorrecte - psmtp (en réponse à la commande RCPT TO)

Je pense que cela signifie que le serveur de réception a seulement vu que l'adresse d'en-tête FROM était dans son propre domaine et que le message provenait d'un serveur qu'il ne considérait pas autorisé à envoyer des messages pour ce domaine. En d'autres termes, le serveur de réception a ignoré l'en-tête SENDER.

Nous avons une solution de contournement en place: la webapp conserve une liste de ces domaines qui semblent ignorer l'en-tête SENDER, et lorsque les en-têtes FROM et TO sont tous les deux dans un tel domaine, elle définit l'en-tête FROM à notre propre adresse e-mail. Mais cette liste nécessite une maintenance.

Existe-t-il une meilleure façon de réaliser l'expérience souhaitée? Nous aimerions être un "bon citoyen" du net, et toutes les parties concernées - expéditeurs et destinataires - souhaitent participer et recevoir ces messages. Une alternative consiste à toujours utiliser l'adresse e-mail de notre entreprise dans l'en-tête FROM et à ajouter le nom / l'adresse de l'auteur au sujet, mais cela semble un peu maladroit.

Eric Rath
la source
Pourquoi ne pas utiliser à la From: authorplace de From: [email protected]?
Pacerier

Réponses:

16

Vous regardez les mauvaises choses. Ce sont les en- têtes de message . Vous devriez regarder l' enveloppe SMTP . (La manière dont l'enveloppe est spécifiée dépend de la manière dont votre application soumet le courrier au système de messagerie. Sur de nombreux systèmes, l'enveloppe est spécifiée par des arguments de ligne de commande au programme utilitaire de soumission du courrier.) Selon exactement quand dans la transaction de protocole il décide d'émettre cette réponse 571, le serveur de relais SMTP n'a peut-être même pas du tout vu les en-têtes de message.

Le texte de réponse indique que l'administrateur de ce serveur de relais SMTP particulier auquel vous parlez a restreint ce que vous pouvez mettre dans l'enveloppe SMTP. Il semble se plaindre de la partie destinataire de l'enveloppe. Mais il peut différer la validation de l'expéditeur de l'enveloppe jusqu'à la spécification du premier destinataire, il peut donc se plaindre de l'expéditeur.

Notez que l'expéditeur de l'enveloppe est l'endroit où les messages d'état de livraison sont envoyés, et vous ne voudrez pas que ceux-ci soient dirigés vers des personnes aléatoires à travers le monde. (Mis à part le fait que beaucoup de gens ne le font pas comme ça, cela n'a aucun sens pour les messages d'état de livraison pour votre courrier à retourner à tout le monde mais vous.) Vous spécifiez comme expéditeur de l' enveloppe.

Soit dit en passant, il est faux d'exiger MXdes enregistrements de ressources. Un serveur de relais SMTP peut être localisé par des enregistrements de ressources Aet AAAAen l'absence d' MXenregistrements de ressources. Voir RFC 5321 § 5.1.

JdeBP
la source
J'ai vérifié la RFC avant d'implémenter la vérification des enregistrements MX et j'ai appris la même chose: rechercher un enregistrement de secours A en l'absence d'un enregistrement MX. Je vais regarder dans l'enveloppe SMTP; Merci pour la suggestion.
Eric Rath
J'ai recherché l'enveloppe SMTP, testé cela. Vous avez raison - j'ai supposé à tort que toutes les vérifications d'origine utiliseraient l'en-tête du message "De", mais il semble que l'enveloppe soit utilisée à la place.
Eric Rath
5

Je peux me tromper, mais la cause la plus probable de l'erreur ci-dessus, en particulier dans le cas de Postini, est que les domaines où vous êtes rejeté ont une politique SPF stricte. La plupart des serveurs de messagerie avec vérification SPF vérifient uniquement l'en-tête From: ils ne se soucient pas de l'en-tête Sender.

Pour vérifier si c'est le cas, exécutez "dig + short TXT domain.com" où domain.com est ce qui vous donne le message d'erreur. Vous devriez récupérer quelque chose comme:

"v = spf1 mx -all"

La partie importante est le -all. Cela signifie que le propriétaire du domaine a déclaré qu'il n'enverra jamais de courrier électronique que des serveurs qui agissent comme ses serveurs de messagerie, tous les autres messages seront rejetés.

Heureusement, si c'est le cas, vous pouvez vérifier activement avant d'envoyer l'e-mail! Demandez à la WebApp d'effectuer une vérification SPF lorsque l'utilisateur saisit son adresse e-mail. Si une politique stricte est en place, ajoutez le domaine à votre liste. Les bibliothèques ne manquent pas pour toutes les langues pouvant effectuer des vérifications SPF.

Niall Donegan
la source
Merci, c'est une bonne idée. J'ai vérifié (avec dig) la poignée de domaines qui ont déjà présenté le comportement indésirable, et un couple avait des enregistrements SPF avec ~ all. Ce n'est donc pas une solution complète, mais je pense qu'il sera difficile de trouver une solution complète à ce problème. Je pense que les autres appliquent la même logique de base, mais sans stocker / publier les informations dans les enregistrements SPF.
Eric Rath
Votre idée a suggéré une autre vérification de validation à effectuer: le domaine de l'adresse doit avoir un enregistrement MX valide. Si quelqu'un saisit mal son adresse e-mail et que l'erreur tombe dans la partie domaine de l'adresse (par exemple, [email protected]), la livraison échouera car aucun enregistrement MX ne peut être trouvé pour le domaine (en supposant que l'erreur n'a pas entraîné de domaine différent mais toujours valide).
Eric Rath
J'ai changé la «réponse acceptée» en JdeBP ci-dessous - la distinction entre l'en-tête du message et l'en-tête de l'enveloppe l'a vraiment cloué. Mais merci pour les commentaires.
Eric Rath
5
Correction: SPF vérifie le "MAIL FROM" dans l'enveloppe, pas les en-têtes "From" ou "Sender".
Simon East