[PHP] Spam détecté dans mon script mail ?!

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 :

<?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:

9 réponses

digival Messages postés 209 Statut Membre 1
 
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.
0
digival Messages postés 209 Statut Membre 1
 
Quelqu'un de plus expérimente pourrait-il me signaler l'erreur svp ?
0
digival Messages postés 209 Statut Membre 1
 
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.
0
le père
 
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é
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
digival Messages postés 209 Statut Membre 1
 
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)
0
le père
 
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 :)

<?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
}

?>
0
digival Messages postés 209 Statut Membre 1
 
super merci :)
0
digival Messages postés 209 Statut Membre 1
 
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)
0
digival Messages postés 209 Statut Membre 1
 
Vraiment, personne ne connaît d'hébergeurs comme demandé ?
0