[PHP] Spam détecté dans mon script mail ?!
digival
Messages postés
209
Statut
Membre
-
digival Messages postés 209 Statut Membre -
digival Messages postés 209 Statut Membre -
Bonjour,
On me renvoie "Warning: mail() [function.mail]: Spam detecte, mail non envoye. in ... "
lorsque j'envoie le message dont voici le script :
-> Quelle est l'erreur interprétée comme un spam ?!
Pour Infos :
Il s'agit d'un mail que les clients m'envoient via un formulaire, je ne sais pas si il faut ajouter des trucs spécifiques ?
On me renvoie "Warning: mail() [function.mail]: Spam detecte, mail non envoye. in ... "
lorsque j'envoie le message dont voici le script :
<?php // ENVOI DU MAIL
// 1. Définition de la destination
$mail_destination = 'mine@hotmail.fr';
if( !preg_match( "#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail_destination ) )
{ $passage_ligne = "\r\n"; }
else
{ $passage_ligne = "\n"; }
//--------------------------------
// 2. Définition du contenu
$message_txt = 'Message au format texte...';
$message_html = '
<html>
<head>
<title>'.$sujet.'</title>
</head>
<body>
<b>'.$_POST['nom'].' souhaiterait s\'inscrire sur mon site !</b>
</body>
</html>
';
// -------------------------
$boundary = "-----=".md5(rand());
// 3. Définition de l'objet
$sujet = $_SESSION['objet'];
//----------------------
// 4. Création du header de l'e-mail
$header = "From: \"Mon Site\"<mine@hotmail.fr>".$passage_ligne;
$header.= "Reply-to: \"Mon Site\" <mine@hotmail.fr>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//------------------------------------
// 5. ------ Création du message --------
$message = $passage_ligne.$boundary.$passage_ligne;
// 5.1. Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//-------------------------------------------
$message.= $passage_ligne."--".$boundary.$passage_ligne;
// 5.2. Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//-------------------------------------------
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//----------------------------------------
// 8. Envoi de l'e-mail
if( $_POST['send'] )
{
mail($mail_destination, $sujet, $message, $header);
}
-> Quelle est l'erreur interprétée comme un spam ?!
Pour Infos :
Il s'agit d'un mail que les clients m'envoient via un formulaire, je ne sais pas si il faut ajouter des trucs spécifiques ?
A voir également:
- [PHP] Spam détecté dans mon script mail ?!
- Spam messenger - Guide
- Clé usb non detecté - Guide
- Script vidéo youtube - Guide
- Windows live mail - Télécharger - Mail
- Publipostage mail - Accueil - Word
9 réponses
Autre Info : Je suis hébergé par Free, qui m'a déjà bloqué ma fonction mail auparavant mais qui a remis à 0 sa liste noire depuis. Je ne sais pas si cela peut avoir des conséquences.
Je me demandais...
Le spam peut-il provenir d'un autre endroit dans ma page que celui copié ici ?
Cependant, j'ai bien mis tout ce qui concernait le mail entre accolades.
Le spam peut-il provenir d'un autre endroit dans ma page que celui copié ici ?
Cependant, j'ai bien mis tout ce qui concernait le mail entre accolades.
Bonjour
J'ai eu le même problème que toi récemment. Apparemment, mes messages étaient trop courts, car je me suis contenté de baratiner un peu plus et tout est rentré dans l'ordre. Je n'ai rien modifié au niveau technique.
Je vois que tu n'utilises pas toujours le même séparateur de ligne selon le destinataire. J'utilise toujours \r\n et ça ne semble pas poser de problème, mais je n'ai pas testé des tonnes d'adresses non plus.
Et je ne mets pas de séparateur de ligne à la fin des headers.
Sinon, la structure de mon message est plus simple que la tienne et il est possible que tu aies une erreur quelque part. Mais je suppose que tu as déjà bien vérifié ça.
Je ne crois pas que le spam puisse venir d'ailleurs. Sauf si ton envoi est dans une boucle dont tu as perdu le contrôle (pas plus de 2000 envois par semaine ...) ou que ton site est piraté par quelqu'un qui envoie vraiment du spam, lui. Mais ça aussi, je suppose que tu l'as déjà vérifié
J'ai eu le même problème que toi récemment. Apparemment, mes messages étaient trop courts, car je me suis contenté de baratiner un peu plus et tout est rentré dans l'ordre. Je n'ai rien modifié au niveau technique.
Je vois que tu n'utilises pas toujours le même séparateur de ligne selon le destinataire. J'utilise toujours \r\n et ça ne semble pas poser de problème, mais je n'ai pas testé des tonnes d'adresses non plus.
Et je ne mets pas de séparateur de ligne à la fin des headers.
Sinon, la structure de mon message est plus simple que la tienne et il est possible que tu aies une erreur quelque part. Mais je suppose que tu as déjà bien vérifié ça.
Je ne crois pas que le spam puisse venir d'ailleurs. Sauf si ton envoi est dans une boucle dont tu as perdu le contrôle (pas plus de 2000 envois par semaine ...) ou que ton site est piraté par quelqu'un qui envoie vraiment du spam, lui. Mais ça aussi, je suppose que tu l'as déjà vérifié
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Super merci beaucoup pour ta réponse je commençais à despérer :)
mon script est tout juste tiré du tuto https://ptiturl.fr/ee2a0b , mais peux-tu me copier-coller ton script stp au cas où ça ne marcherai toujours pas malgré tes suggestions ?
Au passage, est-ce que quelqu'un connaîtrait par hasard un bon hébergeur gratuit et sans pub qui serait moins strict sur le filtre des spams ?
(Je suis actuellement sur Free mais je souhaite rédiger des newsletters, ce qui passerait mal)
mon script est tout juste tiré du tuto https://ptiturl.fr/ee2a0b , mais peux-tu me copier-coller ton script stp au cas où ça ne marcherai toujours pas malgré tes suggestions ?
Au passage, est-ce que quelqu'un connaîtrait par hasard un bon hébergeur gratuit et sans pub qui serait moins strict sur le filtre des spams ?
(Je suis actuellement sur Free mais je souhaite rédiger des newsletters, ce qui passerait mal)
Voici mon script. Il est plus pauvre que le tien (que du HTML, pas de texte pur).
Il fonctionnait en UTF-8, j'ai adapté pour le mettre ici. J'espère que je n'ai pas introduit trop d'erreurs au passage :)
Il fonctionnait en UTF-8, j'ai adapté pour le mettre ici. J'espère que je n'ai pas introduit trop d'erreurs au passage :)
<?php
//----------------------------------------------------
// encodage/décodage quoted-printable pour headers (Q-encode)
// idem QPencode, plus underscore codé en =xx et espace encodé en underscore
// et ? codé en =3F (pour éviter les ?=)
function Qencode($str) {
$lines = preg_split("/\r?\n/", $str);
$out = '';
foreach ($lines as $line) {
$newpara = '';
for ($j = 0; $j <= strlen($line) - 1; $j++) {
$char = substr ( $line, $j, 1 );
$ascii = ord ( $char );
if ( $ascii < 32 || $ascii == 61 || $ascii > 126 || $char=='_' || $char=='?' ){
$char = '=' . strtoupper ( dechex( $ascii ) );
}
else if ($char==' ') $char='_';
if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 ) {
$out .= $newpara . '=' . CRLF; $newpara = '';
}
$newpara .= $char;
}
$out .= $newpara . CRLF;
}
return trim ( $out );
}
// encodage/décodage quoted-printable
function QPencode($str) {
$lines = preg_split("/\r?\n/", $str);
$out = '';
foreach ($lines as $line) {
$newpara = '';
for ($j = 0; $j <= strlen($line) - 1; $j++) {
$char = substr ( $line, $j, 1 );
$ascii = ord ( $char );
if ( $ascii < 32 || $ascii == 61 || $ascii > 126 ) {
$char = '=' . strtoupper ( dechex( $ascii ) );
}
if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 ) {
$out .= $newpara . '=' . CRLF; $newpara = '';
}
$newpara .= $char;
}
$out .= $newpara . CRLF;
}
return trim ( $out );
}
function QPdecode( $str ) {
$out = preg_replace('/=\r?\n/', '', $str);
$out = preg_replace('/=([A-F0-9]{2})/e', chr( hexdec ('\\1' ) ), $out);
return trim($out);
}
//-----------------------------------------------------------------------
// envoi mail en HTML
// $contenu ne doit contenir que ce qui est entre <body> </body>exclus
// le sujet est mis en titre de page
function EnvoyerMail ($to, $sujet,$contenu) {
global $configdb;
$subject = QEncode($sujet);
$headers = "From: $configdb[maillistmaster]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=\"iso8859-1\"\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable";
$msg="<html>\r\n";
$msg.="<head>\r\n";
$msg.="<title>$sujet</title>\r\n";
$msg.="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso8859-1\">";
$msg.="</head>\r\n";
$msg.="<body>\r\n";
$msg.=$contenu;
$msg.="</body>\r\n";
$msg.="</html>\r\n";
$phrase="envoi de mail à: $to -- Sujet: $subject -- Message: $msg";
echo $phrase;
// echo 'mail pas envoyé : ',$msg,'<br/>'; return true;
if (mail($to, $subject, QPEncode($msg), $headers)===false) {
return false;
}
return true; // ok
}
?>