Entête de mail est foireuses

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous !

Depuis quelques jours mes contacts n'arrivent plus ) m'envoyer de mails. Il reçoivent un message d'erreur
Warning: mail(): Multiple or malformed newlines found in additional_header
à la ligne
if(mail(LE_MAIL, $titre, stripslashes($corps), $tete)){$ok_mail="true";


Voici mon code et sollicite votre aide pour correction:
<?php if(isset($_POST['Envoyer'])){$erreur="";

// Nettoyage des entrées
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}

// Formatage des entrées
$f_Nom = trim(ucwords(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Nom)));
$f_Telephone = trim(preg_replace("[^0-9\ +]", "", $f_Telephone));
$f_Email = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Email));
$f_Observation = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Observation));

// Verification des champs
if(strlen($f_Nom)<2) {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_NOM.'</strong>'.$ERREUR_CHAMP_2; $errf_Nom=1;}
if($f_Postule==0) {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_POSTULE.'</strong>'.$ERREUR_CHAMP_2; $errf_Postule=1;}
if(strlen($f_Email)<2) {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_EMAIL.'</strong>'.$ERREUR_CHAMP_2; $errf_Email=1; }else{
if(!preg_match('/^[^@]{1,64}@[^@]{1,255}$/', $f_Email)) {$erreur.="<li>".$ERREUR_SYNTX_1.'<strong>'.$CONTACT_EMAIL.'</strong>'.$ERREUR_SYNTX_2; $errf_Email=1;}}
if(strlen($f_Telephone)<2)   {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_TELEPHONE.'</strong>'.$ERREUR_CHAMP_2; $errf_Telephone=1;}
if($_FILES['f_Curriculum']['error'] == UPLOAD_ERR_NO_FILE) {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_CV.'</strong>'.$ERREUR_CHAMP_2; $errf_Curriculum=1;}
if($_FILES['f_Motivation']['error'] == UPLOAD_ERR_NO_FILE) {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_LETTRE.'</strong>'.$ERREUR_CHAMP_2; $errf_Motivation=1;}
if(strlen($f_Observation)<2)  {$erreur.="<li>".$ERREUR_CHAMP_1.'<strong>'.$CONTACT_OBSERVATION.'</strong>'.$ERREUR_CHAMP_2; $errf_Observation=1;}

if($erreur==""){

@mkdir ("_/",0777,true) ;

$upload_file1 = '_/'.$_FILES['f_Curriculum']['name'];
$upload_file2 = '_/'.$_FILES['f_Motivation']['name'];

if (move_uploaded_file($_FILES['f_Curriculum']['tmp_name'], $upload_file1)) {
$ext1 = explode(".", basename($_FILES['f_Curriculum']['name']));
switch($ext1[1]) {default: $attach_type1 = "application/octet-stream"; break;
case "gz": $attach_type1 = "application/x-gzip"; break;
case "tgz": $attach_type1 = "application/x-gzip"; break;
case "zip": $attach_type1 = "application/zip"; break;
case "pdf": $attach_type1 = "application/pdf"; break;
case "png": $attach_type1 = "image/png"; break;
case "gif": $attach_type1 = "image/gif"; break;
case "jpg": case"jpeg": $attach_type1 = "image/jpeg"; break;
case "txt": $attach_type1 = "text/plain"; break;
case "htm": $attach_type1 = "text/html"; break;
case "html": $attach_type1 = "text/html"; break;}

if (move_uploaded_file($_FILES['f_Motivation']['tmp_name'], $upload_file2)) {
$ext2 = explode(".", basename($_FILES['f_Motivation']['name']));
switch($ext2[1]) {default: $attach_type2 = "application/octet-stream"; break;
case "gz": $attach_type2 = "application/x-gzip"; break;
case "tgz": $attach_type2 = "application/x-gzip"; break;
case "zip": $attach_type2 = "application/zip"; break;
case "pdf": $attach_type2 = "application/pdf"; break;
case "png": $attach_type2 = "image/png"; break;
case "gif": $attach_type2 = "image/gif"; break;
case "jpg": case"jpeg": $attach_type2 = "image/jpeg"; break;
case "txt": $attach_type2 = "text/plain"; break;
case "htm": $attach_type2 = "text/html"; break;
case "html": $attach_type2 = "text/html"; break;}


if(file_exists($upload_file1)) {
$file1 = fopen($upload_file1, "r");
$contents1 = fread($file1, filesize($upload_file1));
$encoded_attach1 = chunk_split(base64_encode($contents1));
fclose($file1);}

if(file_exists($upload_file2)) {
$file2 = fopen($upload_file2, "r");
$contents2 = fread($file2, filesize($upload_file2));
$encoded_attach2 = chunk_split(base64_encode($contents2));
fclose($file2);}

$frontiere = '-----=' . md5(uniqid(mt_rand()));

// Titre du message
$titre=$REC_OffreEmploi." : ".$list['f_Postule'][$f_Postule];

// Entête du message
$tete.="From:".$f_Email."\n";
$tete.='MIME-Version: 1.0'."\n";
$tete.='Content-Type: multipart/mixed; boundary="'.$frontiere.'"'."\n";
$tete.= '--'.$frontiere."\n";

// Première pièce jointe
$tete.= "Content-type: ".$attach_type1."; name=".$upload_file1."\n";      
$tete.= "Content-Length:".filesize($upload_file1)."\n";     
$tete.= "Content-transfer-Encoding: BASE64\n";
$tete.= "Content-disposition: attachment; filename=".$upload_file1."\n\n";
$tete.= $encoded_attach1."\n".'--'.$frontiere."\n";

// Seconde pièce jointe
$tete.= "Content-type: ".$attach_type2."; name=".$upload_file2."\n";  
$tete.= "Content-Length:".filesize($upload_file2)."\n";    
$tete.= "Content-transfer-Encoding: BASE64\n";
$tete.= "Content-disposition: attachment; filename=".$upload_file2."\n\n";
$tete.= $encoded_attach2."\n".'--'.$frontiere."\n";

// Corps du message
$corps.=$CONTACT_NOM." : ".$f_Nom."\n";
$corps.=$CONTACT_POSTULE." : ".$list['f_Postule'][$f_Postule]."\n";
$corps.="\n";
$corps.=$CONTACT_TELEPHONE." : ".$f_Telephone."\n";
$corps.=$CONTACT_EMAIL." : ".$f_Email."\n";
$corps.=$CONTACT_OBSERVATION." : ".$f_Observation."\n";

// Envois du mail
if(mail(LE_MAIL, $titre, stripslashes($corps), $tete)) {$ok_mail="true";}

//Sinon
else{$erreur.="<div class='TexteError'>".$ERREUR_ERROR_1."</div>";}
}}
}} ?>


Merci d'avance

A voir également:

10 réponses

Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Merci Nhavy,

Effectivement, l'erreur est sur les pièce jointe. Si je supprime ces 2 blocs il fonctionne... mais si je garde 1 seul il ne fonctionne pas. Je n'arrive pas à corriger le problème :s
// Entête du message
$tete.="From:".$f_Email."\n";
$tete.='MIME-Version: 1.0'."\n";
$tete.='Content-Type: multipart/mixed; boundary="'.$frontiere.'"'."\n";
$tete.= '--'.$frontiere."\n";


// BLOC A SOUCIS
// Première pièce jointe
$tete.= "Content-type: ".$attach_type1."; name=".$upload_file1."\n";      
$tete.= "Content-Length:".filesize($upload_file1)."\n";     
$tete.= "Content-transfer-Encoding: BASE64\n";
$tete.= "Content-disposition: attachment; filename=".$upload_file1."\r\n";
$tete.= $encoded_attach1."\n".'--'.$frontiere."\n";

// Seconde pièce jointe
$tete.= "Content-type: ".$attach_type2."; name=".$upload_file2."\n";  
$tete.= "Content-Length:".filesize($upload_file2)."\n";    
$tete.= "Content-transfer-Encoding: BASE64\n";
$tete.= "Content-disposition: attachment; filename=".$upload_file2."\r\n";
$tete.= $encoded_attach2."\n".'--'.$frontiere."\n";
1
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Et tu a tenté de remplacer tes \r\n par des \n ? (Ou par des PHP_EOL)

Sinon, la solution la plus pérenne est de passer par une class, genre PHPmailer qui s'occupe de générer un code propre.
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Je crois que je bloc encore... hier il fonctionnait et là ce matin il se met à re-déconner. Il me dit que le mail est bel et bien parti mais rien n'arrive. Je n'ai plus donc de message d'erreur mais pas d'arrivée de mail...

$frontiere  = '-----=' . md5(uniqid(mt_rand()));
$Entrer   	= "\n";

// Entête du message
$tete="From:".$f_Email.$Entrer;
$tete.='MIME-Version: 1.0'.$Entrer;
$tete.='Content-Type: multipart/mixed; boundary='.$frontiere.$Entrer;
$tete.= '--'.$frontiere.$Entrer;

// Première pièce jointe
$tete.= "Content-type: ".$attach_type1."; name=".$upload_file1.$Entrer;      
$tete.= "Content-Length:".filesize($upload_file1).$Entrer;     
$tete.= "Content-transfer-Encoding: BASE64".$Entrer;
$tete.= "Content-disposition: attachment; filename=".$upload_file1.$Entrer;
$tete.= $encoded_attach1.$Entrer;
$tete.= $encoded_attach1.'--'.$frontiere.$Entrer;

// Seconde pièce jointe
$tete.= "Content-type: ".$attach_type2."; name=".$upload_file2.$Entrer;  
$tete.= "Content-Length:".filesize($upload_file2).$Entrer;    
$tete.= "Content-transfer-Encoding: BASE64".$Entrer;
$tete.= "Content-disposition: attachment; filename=".$upload_file2.$Entrer;
$tete.= $encoded_attach2.'--'.$frontiere.$Entrer;

// Corps du message
$corps="Nom et Prénoms : ".$f_Nom.$Entrer;
$corps.="Je postule pour : ".$list['f_Postule'][$f_Postule].$Entrer;
$corps.= $Entrer;
$corps.="Téléphone : ".$f_Telephone.$Entrer;
$corps.="Adresse Email : ".$f_Email.$Entrer;
$corps.="Observations complémentaires : ".$f_Observation;

// Décodage pour le UTF-8
$Le_Mail  = LE_MAIL;
$Le_Titre = utf8_encode($titre);
$Le_Corps = utf8_encode(stripslashes($corps));
$La_Tete  = $tete;

// Envois du mail
if(mail($Le_Mail, $Le_Titre, $Le_Corps, $La_Tete))

Avec ce code je n'ai aucune erreur mais le mail n'arrive pas.
Dans le cas ou je change
$La_Tete  = $tete;
en
$La_Tete  = "";
Le mail arrive mais bon, sans pièce jointe ni format d'entête et en spam (normal).

Tu trouves ça normal ?


Configuration: Windows / Firefox 42.0
1
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Salut,
Ligne 101/108, tu a un double saut de ligne, ça le gène peut-être ?

Sinon, met en commentaire chaque ligne qui commence par "$tete.="
Et restest en activant les blocs un à un (En faisant un test à chaque fois), tu finira par trouver ce qui cloche.
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Salut Nhavy,

Oui j'avais testé tout ça mais en vain.
Après j'ai tenter de faire ceci :

Remplacer :
$tete.= $encoded_attach2."\n".'--'.$frontiere."\n";

Par:
$tete.= $encoded_attach2.'--'.$frontiere."\n";


Et tout est rentré dans l'ordre.
Grand merci en tout cas pour ton aide !
0

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

Posez votre question
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Les mails avec pièces jointes finissent souvent dans les SPAM, tu a regardé de ce côté là ?
Sinon, à voir si tes pièces jointes ne sont pas trop volumineuse.


Si tu essaye avec une seule pièce jointe ça passe ?
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Rien arrive, pas même un seul. La pièce jointe mise en test est un bloc-notes contenant le mot "Bonjour"
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
essaye ça pour ta première pièce jointe :
$tete.= "Content-Type: ".$attach_type1."; name=\"".$upload_file1."\"".$Entrer;      
$tete.= "Content-Transfer-Encoding: base64".$Entrer;
$tete.= "Content-Disposition: attachment; filename=\"".$upload_file1."\"".$Entrer;
$tete.= $Entrer.$encoded_attach1.$Entrer.$Entrer;
$tete.= $Entrer.'--'.$frontiere."--".$Entrer;


Et met la deuxième en commentaire.
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Là il m'envoie la même erreur...
Warning: mail(): Multiple or malformed newlines found in additional_header in
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
La solution la plus simple est de passer via PHPMailer (C'est une classe simple qui format le mail à ta place), tu mettra moins de temps à faire la transition qu'a trouver le soucis je pense.
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Bonjour Nhay,

Je viens de comprendre le soucis. En fait il n'y avait pas d'erreur dans le dernier code que je t'ai envoyé. Le problème venait de la boite mail elle même... bizarrement.
Si je mettais outlook ca ne fonctionnait pas, si je mettais gmail ca fonctionnait.
J'ai donc essayé un autre compte mail outlook et il a fonctionné et depuis il fonctionne toujours.

Je te remercie pour ton aide et ta patience.
Cordialement.
0