MAIL() PHP, pb d'affichage dans gmail

Signaler
-
Messages postés
3
Date d'inscription
lundi 6 janvier 2014
Statut
Membre
Dernière intervention
8 janvier 2014
-
Bonjour et bonne année,

j'ai un petit problème de mail()

J'envoie mon e-mail depuis un site hébergé sur one and one, sur le messagerie one and one tout se passe bien, j'ai testé sur hotmail çà passe aussi. Par contre sur gmail, il semble ne pas prendre mon header.

J'ai fait le tour de nombreux forum pour voir les solutions existantes mais je dois avoir les yeux qui ne voient plus clairs car je vois pas d'où vient le problème.

Voici mon code et le résultat dans gmail
<?php
session_start();
require('fct_espclient.php');//insertion page fonctions

$session_id=$_SESSION['session_id'];
if (!isset($_SESSION['session_id']))
{
    echo "<script language='javascript'>window.top.location.href='index.php'</script>";
}
else
{
$f=connect();

$action_id=$_POST["action_id"];
$struct_id=$_POST["struct_id"];

if (isset($_POST["urgent"]))$urgent="urgent: ";
else $urgent="";
$struct_mail=$_POST["struct_mail"];
$objet=$_POST["objet"];
$contenu=$_POST["contenu"];
$struct_nom=$_POST["struct_nom"];
include('menugen.php');


if (isset($_FILES['userfile']) && is_uploaded_file($_FILES['userfile']['tmp_name'])or ((isset($_POST['doc_id']))and($_POST['doc_id']!=""))) $HA_supp="oui";
else $HA_supp="non";
$requete1=mysql_query("select * from utilisateur,session where (session.session_id=$session_id)and(session.user_id=utilisateur.user_id)");
while ($row=mysql_fetch_array($requete1))
{
$d=date("Y-m-d");

$query = "INSERT INTO heure_action (HA_id,tache_id,HA_date,HA_comment,user_id,HA_supp,comm_id,HA_etat,action_id)
                                VALUES('','2','$d',\"mail à $struct_nom \",'$row[user_id]','$HA_supp','1','valide','$action_id');";
$result = MYSQL_QUERY($query);
$req_sess="select max(HA_id) k from heure_action";
                       $result_sess = MYSQL_QUERY($req_sess);
                       while($rsk = mysql_fetch_object($result_sess))
                       {
                               $HA_id=$rsk->k;
                       }
                       mysql_free_result($result_sess);

mysql_query("insert into message values ('',\"$objet\",\"$contenu\",'$HA_id','non')");
$req_sess="select max(mess_id) k from message";
$result_sess = MYSQL_QUERY($req_sess);
while($rsk = mysql_fetch_object($result_sess))
 {
      $mess_id=$rsk->k;
}
mysql_free_result($result_sess);
mysql_query("insert into mess_struc values ('','$mess_id','$struct_id')");

$suj=$urgent.$objet;
$mail_to ="***@***";//Destinataire  
$from_mail = $row['user_mail']; //Expediteur  
$from_name = $row['user_mail']; //Votre nom, ou nom du site  
$reply_to = $row['user_mail']; //Adresse de réponse  
$subject = utf8_decode($suj);
$subject = mb_encode_mimeheader($subject,"UTF-8");   

$contenuhtml="";


    
// clé aléatoire de limite
srand((double)microtime()*1000000);
$boundary = md5(uniqid(rand()));
// Headers
$entete = "MIME-Version: 1.0 \n";  
$entete .= "Content-Type: multipart/mixed; boundary=\"$boundary\" \n";

$entete .= "From: $from_mail \n";  
$entete .= "Bcc: $from_mail, ***@*** \n";
$entete .= "X-Priority: 1 \n";  
$entete .= "Content-Transfer-Encoding:8bit \n";
$entete .= 'X-Mailer: PHP/' . phpversion();
$entete .= " \n";  
 
// Message
$message  = "This is a multi-part message in MIME format. \n";
$message  .= "--$boundary \n";
$message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message .= "Content-Transfer-Encoding: binary\n";
$message .= $contenu;
$message .= "\n";
$message  .= "--$boundary \n";  
$message .= "Content-Type: text/html; charset=\"iso-8859-1\" \n";  
$message .= "Content-Transfer-Encoding:binary \n";  
$message .= "\n";  
$message .= $contenuhtml;  
$message .= "\n";  
 
// Pièce jointe
if (isset($_POST['doc_id']))
{
    $requete2=mysql_query("select doc_nom from document where(doc_id=$_POST[doc_id])");
    while ($res=mysql_fetch_array($requete2))
    {
        $file_name = $res['doc_nom'];
        if (file_exists(".docs/".$file_name))
        {
            $file_type = filetype(".docs/".$file_name);
            $file_size = filesize(".docs/".$file_name);
        
            $content = file_get_contents(".docs/".$file_name);
            $content = chunk_split(base64_encode($content));
            
            $message .= "--$boundary \n";
            $message .= "Content-type: $file_type;name=\"$file_name\"\n";
            $message .= "Content-transfer-encoding:base64 \n";
            $message .= "Content-Disposition: attachment; filename=\"$file_name\" \n";  
            $message .= "\n";  
            $message .= $content."\n";
            $message .= "\n";
            mysql_query("insert into mess_pj values ('','$mess_id','$_POST[doc_id]','')");
        }
    }
    mysql_free_result($requete2);
}
if (isset($_FILES['userfile']) && is_uploaded_file($_FILES['userfile']['tmp_name']))
{

         $file_name = $_FILES['userfile']['name'];

           $file_type = filetype($_FILES['userfile']['tmp_name']);
           $file_size = filesize($_FILES['userfile']['tmp_name']);
           $content = chunk_split(base64_encode(file_get_contents($_FILES['userfile']['tmp_name'])));

        $message .= "--$boundary \n";
            $message .= "Content-type: $file_type;name=\"$file_name\"\n";
            $message .= "Content-transfer-encoding:base64 \n";
            $message .= "Content-Disposition: attachment; filename=\"$file_name\" \n";  
            $message .= "\n";  
            $message .= $content."\n";
            $message .= "\n";
        
            mysql_query("insert into mess_pj values ('','$mess_id','',\"$file_name\")");
           unlink($_FILES['userfile']['tmp_name']);

        //...
}
// Fin
$message .= "--".$boundary."-- \n end of the multi-part";
 
// Function mail()
mail($mail_to, $subject, $message, $entete);




}
 mysql_free_result($requete1);
mysql_close($f);



}
?>


J'ai deux sources possible pour les pièces jointes, soit sur l'herbergeur (listées sur une BDD) soit uploader



From: ***@***
To:  
Date: Sun, 22 Dec 2013 22:24:04 +0100
Subject: test
 
This is a multi-part message in MIME format.
--56cb8620624e6641bbe66343a30b06c0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: binary
teste
--56cb8620624e6641bbe66343a30b06c0
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding:binary

teste<br>
--56cb8620624e6641bbe66343a30b06c0
Content-type: file;name="Affiche fete noel 2013.pdf"
Content-transfer-encoding:base64
Content-Disposition: attachment; filename="Affiche fete noel 2013.pdf"

JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu
Zyhmci1GUikgL1N0cnVjdFRyZWVSb290IDgwIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4v
UGFnZUxhYmVscyAxMTAgMCBSPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3Vu
dCAxL0tpZHNbIDMgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9UeXBlL1BhZ2UvUGFyZW50
IDIgMCBSL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbWFnZTUgNSAwIFIvSW1hZ2U3IDcgMCBSL0lt

<<je raccourci ici>>

bGVyDQo8PC9TaXplIDExMi9Sb290IDEgMCBSL0luZm8gNzkgMCBSL0lEWzw0Q0JDMUJDREM1NzU3
OTQ0QUY5MERCMEY4OTMwMkU0MD48NENCQzFCQ0RDNTc1Nzk0NEFGOTBEQjBGODkzMDJFNDA+XSAv
UHJldiA3NjczMTMvWFJlZlN0bSA3NjY3NjE+Pg0Kc3RhcnR4cmVmDQo3Njk3MTMNCiUlRU9G


--56cb8620624e6641bbe66343a30b06c0--
 end of the multi-part




merci d'avance
A voir également:

6 réponses

Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019

Bonjour,
gmail considère que tous les messages non conforme à la norme sont du spam et ne distribue pas
////////////////////////////////////////////////////////////////////////////////
Notre système a détecté que ce message est 550 5.7.1 pas conforme de RFC 2822. Pour réduire la quantité de spam envoyé à Gmail, 550-5.7.1 ce message a été bloqué. Veuillez consulter le bulletin 550 5.7.1 spécifications RFC 2822 pour plus d'informations. e2si92444697eeg.93 - gsmtp
///////////////////////////////////////////////////////////////////////////////

regardes ce qui ne va pas dans les headers du mail
Messages postés
3
Date d'inscription
lundi 6 janvier 2014
Statut
Membre
Dernière intervention
8 janvier 2014

Merci de ta réponse,

J'ai du mal m'expliquer, le message ne passe en spam. J'ai le bon expéditeur et le bon objet qui apparaissent dans ma boite de réception sur gmail mais par contre c'est au niveau du contenu du message et de la pièce jointe que çà bloque puisque j'obtiens çà:

From: ***@***
To:
Date: Sun, 22 Dec 2013 22:24:04 +0100
Subject: test

This is a multi-part message in MIME format.
--56cb8620624e6641bbe66343a30b06c0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: binary
teste
--56cb8620624e6641bbe66343a30b06c0
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding:binary

teste<br>
--56cb8620624e6641bbe66343a30b06c0
Content-type: file;name="Affiche fete noel 2013.pdf"
Content-transfer-encoding:base64
Content-Disposition: attachment; filename="Affiche fete noel 2013.pdf"

JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu
Zyhmci1GUikgL1N0cnVjdFRyZWVSb290IDgwIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4v
UGFnZUxhYmVscyAxMTAgMCBSPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3Vu
dCAxL0tpZHNbIDMgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9UeXBlL1BhZ2UvUGFyZW50
IDIgMCBSL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbWFnZTUgNSAwIFIvSW1hZ2U3IDcgMCBSL0lt

<<je raccourci ici>>

bGVyDQo8PC9TaXplIDExMi9Sb290IDEgMCBSL0luZm8gNzkgMCBSL0lEWzw0Q0JDMUJDREM1NzU3
OTQ0QUY5MERCMEY4OTMwMkU0MD48NENCQzFCQ0RDNTc1Nzk0NEFGOTBEQjBGODkzMDJFNDA+XSAv
UHJldiA3NjczMTMvWFJlZlN0bSA3NjY3NjE+Pg0Kc3RhcnR4cmVmDQo3Njk3MTMNCiUlRU9G


--56cb8620624e6641bbe66343a30b06c0--
end of the multi-part
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019

Normalement la norme pour les message c'est /r/n
je te donne mon code
$boundary = "-----=" . md5(uniqid(rand())); // création aléatoire des frontieres boundary
$rn= "\r\n";

$headers .= "From:" . $email_exp . $rn;
$headers .= "To:".$email_dest.$rn;
$headers .= "X-Priority:" . $email_priorite . $rn;//ok
$headers .= "Cc:" . $email_cc . $rn;
$headers .= "Bcc:".$email_bcc.$rn;
$headers .= "Reply-to:" . $reply_email . $rn;//ok
$headers .= "Priority:".$email_priorit . $rn;//ok
$headers .= "X-Mailer: PHP v" . phpversion() . $rn;//ok
$headers .= "X-Originating-IP: [" . getenv("REMOTE_ADDR") . "]" . $rn;//ok
$headers .= "X-Sender-IP: " . $_SERVER["REMOTE_ADDR"] . $rn; //ok
$headers .= "X-Confirm-Reading-To:" . $email_exp . $rn; //confirmation de lecture ok
$headers .= "Delivery-date: " . date("D, j M Y H:i:s " . $timezone) . $rn;//ok

$headers .= 'MIME-Version: 1.0' . $rn;
$headers .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $rn;
$headers .= $rn; //rajouter ?

//======================= Ouverture de Boundary=============================

$message = 'This is a multi-part message in MIME format.' . $rn;
//message .= "--$boundary\r\n"; //ouverture de la frontiére
$message.= $rn . "--" . $boundary . $rn;
//====================creation du message au format HTML====================

$message .= 'Content-Type: text/html; charset="utf-8"' . $rn;
$message .= 'Content-Transfer-Encoding:8bit' . $rn; // 8 bit pour les messages accentués
$message .= wordwrap($message, 70, "\r\n"); //limite le nbre de caractére du message à 70 par ligne
//$message .= $email_message;
$message .= $rn;
ect.............
envoies toi un email sur une fauuse adresse et un reply sur ton adresse email

tu feras peut être la tête de tes headers et de ton message, et ce que ne digère pas gmail
mais rassure toi , ce n'est pas mieux pour moi avec gmail pour les adresses en Bcc
un coup c'est bon ,un coup en spam
et maintenant en erreur

à+
Messages postés
3
Date d'inscription
lundi 6 janvier 2014
Statut
Membre
Dernière intervention
8 janvier 2014

J'ai tester ton code, çà améliore les choses mais apparemment le gros du problème semble venir des pièces jointes
Messages postés
38
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
13 janvier 2019

voilà ce que je mets et çà fonctionne, mais je la trate avant pour les exrention .jpg .pdf ...........

//===========================Préparation Piéce jointe======================

if ($name_file != "") // si le fichier n'est pas nul
{
$file = $name_file;
$fp = fopen($file, "rb");
$attachment = fread($fp, filesize($file));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));

//================ ouverture de boundary pour la piece jointe==================

$message .= "--$boundary\r\n"; ////on ouvre boundary pour la piece jointe

//========================Codage et Envoi de la Piece Jointe====================
//-------------------------------------------
$message .= "Content-Type: $type2; name=\"$file\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: inline; filename=\"$file\"\r\n";
$message .= "\r\n";
$message .= $attachment . "\r\n";
$message .= "\r\n\r\n";
}
//--------------------Fin traitement de la Piéce Jointe ------------------------
Messages postés
3
Date d'inscription
lundi 6 janvier 2014
Statut
Membre
Dernière intervention
8 janvier 2014

bon je vais m'auto-baffer pour un moment.

Mon problème venez de 2 sources:

- la première, un champ trop petit pour mes noms de fichier dans la BDD et des collègues qui font des fichiers avec des noms de 80 caractères avec des guillements! j'aurais du y pensé plus tôt....
- le deuxième est dû à l'envoi du mail en text brut et html qui ne semblait pas plaire à gmail. Je les envoie plus qu'en texte brut, de toute manière mes collègues ne feront pas de mise en page en html.

merci encore pour ton aide.