Question

J'essaie d'envoyer un courrier électronique à partir d'un site que je suis en train de créer, mais il se retrouve dans le dossier spam de Yahoo. C'est le courrier électronique qui envoie les informations d'identification. Que puis-je faire pour le légitimer?

$header = "From: site <sales@site.com>\r\n";
$header .= "To: $name <$email>\r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site <sales@site.com>" . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);
Était-ce utile?

La solution

Outre les suggestions de Ted Percival, vous pouvez également essayer d'utiliser PHPMailer pour créez les emails pour vous plutôt que de construire manuellement les en-têtes. J'ai beaucoup utilisé cette classe et je n'ai eu aucun problème à ce que les courriers électroniques soient rejetés comme spam par Yahoo ou toute autre personne.

Autres conseils

  • N'utilisez pas le code HTML dans votre courrier électronique.
  • Envoyez-le via un serveur de messagerie légitime avec une adresse IP statique et un reverse-DNS (PTR) qui pointe sur le nom d'hôte réel de la machine (et correspond à une recherche directe).
  • Incluez un ID de message (ou assurez-vous que le service de messagerie local en ajoute un pour vous).
  • Exécutez votre e-mail via SpamAssassin pour voir les règles de scoring erronées auxquelles il correspond. Évitez de les faire correspondre.
  • Utilisez Courrier identifié par DomainKeys pour signer numériquement vos messages.

Je viens d’essayer avec succès les actions suivantes de mon compte Yahoo! Compte d'hébergement Web:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "To: $name \r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site " . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);

Cependant, vous avez des doublons dans votre en-tête, vous ne devriez avoir à faire que:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);

Il est également possible que "sendmail" (qui se trouve sous la fonction PHP mail ()) nécessite des paramètres supplémentaires. Si vous rencontrez un problème lié au fait que les en-têtes de retour (tels que Return-Path) ne sont pas définis avec ce que vous avez défini, vous devrez peut-être utiliser le paramètre cinquième mail (). Exemple:

mail('recipient@domain.com', 'Subject', $mail_body, $headers, " -f sender@domain.com");

Il existe quelques preuves supplémentaires selon lesquelles la vraie vanilla sendmail pourrait avoir un problème avec cela! Espérons que vous avez postfix en tant que support mail () sous-jacent de PHP sur votre serveur cible.

En plus des suggestions de Ted Percival , assurez-vous que l'adresse IP d'où provient l'e-mail est une source légitime pour l'e-mail conformément à la enregistrement SPF de site.com. Si site.com ne possède pas d’enregistrement SPF, en ajouter un (qui autorise bien sûr l’adresse IP en question) peut aider à récupérer les filtres antispam des emails.

Et si vous devez absolument utiliser le code HTML dans votre courrier électronique, assurez-vous d'inclure également une version en texte brut; vous utiliseriez le type de contenu " multipart / alternative " au lieu de "text / html".

Les suggestions de Ted sont bonnes, de même que celles de Tim, mais la seule façon pour moi de recevoir un courrier électronique de manière fiable via Yahoo / Hotmail / etc est d'utiliser les classes de courrier électronique PEAR. Essayez ces & amp; (en supposant que votre serveur est OK), je peux pratiquement garantir que cela fonctionnera.

Ted et Tim ont d’excellentes suggestions. Tout comme Shabbyrobe. Nous utilisons PHPMailer et n’avons aucun problème avec les filtres anti-spam.

Une chose à noter est que de nombreux filtres anti-spam ne compteront PAS avoir une version texte contre vous si vous utilisez un format MIME. Vous pouvez ajouter tous les en-têtes et la version texte vous-même, ou simplement laisser PHPMailer ou la bibliothèque de messages PEAR s'en occuper pour vous. Avoir une version texte peut aider ou ne pas aider, mais c'est une bonne pratique et convivial.

Je me rends compte que votre exemple de code n’est en fait qu’un exemple, mais cela vaut la peine de dire: ne laissez jamais tomber les données fournies par les utilisateurs dans vos en-têtes de courrier. Assurez-vous de valider que ce sont les données que vous attendez. Il est trivial de transformer un script de messagerie php en un relais ouvert, et personne ne le souhaite.

Vérifiez la RFC 822 et la RFC 2045 pour le format de courrier électronique. Je trouve la classe Email de python vraiment facile à utiliser. Je suppose que PEAR de php fait la même chose (selon les mails précédents). De plus, l'en-tête et le corps sont séparés par un " \ r \ n \ r \ n ", vous ne pouvez pas savoir si votre code l'insère automatiquement, mais vous pouvez essayer de l'ajouter à l'en-tête.

Je ne pense pas que DK / SPF puisse être nécessaire (car il existe de nombreux serveurs Web sans support DK / SPF). Il peut y avoir beaucoup de facteurs qui pourraient causer son blocage (au moins 10K critères et méthodes différents .. p0f, liste grise, liste grise, liste noire, etc.). Assurez-vous que votre courrier électronique est correctement formaté (cela fait une GRANDE différence). Regardez dans les bibliothèques qui génèrent l’en-tête complet pour vous. Ainsi, vous aurez moins de risques de vous tromper.

Ajouter un enregistrement SPF est très facile. Vous devriez essayer.

Celui-ci est destiné à dreamhost plus googlemail Vous devriez également ajouter votre adresse IP au serveur Web (dans mon cas, la ligne précédant googlemail) La dernière ligne indique au serveur d'effectuer un rejet progressif (marquer comme spam mais ne pas supprimer). Je l'utilise au lieu de "-" " (supprimer) car la documentation de Google le dit bien: -)

C'est un enregistrement TXT v = spf1 ip4: 64.111.100.0/24 ip4: 66.33.201.0/24 ip4: 66.33.216.0/24 ip4: 208.97.132.0/24 ip4: 208.97.187.0/24 ip4: 208.113.200.0/24 ip4: 208.113.244.0/24 ip4: 208.97.132.74 ip4: 67.205.36.71 comprennent: aspmx.googlemail.com mx ~ all

J'espère que ça aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top