par
marion3786 » 11 juin 2011, 14:09
Bonjour et merci,
Je n'ai qu'un seul code et il fonctionne parfaitement, sauf chez Alice. Quand il y a des pièces jointes images (les pdf et autres doc passent), l'expéditeur ne reçoit pas du tout de copie... S'il n'y a pas de fichier joint, il reçoit la copie.
C'est certainement dans l'entête en effet, mais je ne vois pas où car chez Hotmail par exemple, ça passe sans problème.
/******************************
* partie générale de l'en-tête
******************************/
$entete = 'From: '.utf8_decode($nom).' '.utf8_decode($prenom).' <'.$email.'>' . "\r\n";
$entete .= 'MIME-Version: 1.0'."\r\n";
$entete .= 'Content-Type: text/html; charset=utf-8'."\r\n";
/**********************************
* En cas d'ajout d'un fichier joint
***********************************/
$fichier= $_FILES['fichierjoint']['tmp_name'];
$taille = $_FILES['fichierjoint']['size'];
$type = $_FILES['fichierjoint']['type'];
$nomfichierjoint = $_FILES['fichierjoint']['name'];
/*******************************************************************************
* On vérifie l'extension du fichier pour ne pas autoriser les fichiers à risques
********************************************************************************/
// Les extensions autorisées
$ExtensionsAutorisees = array('.gif','.jpg','.jpeg','.png','.doc','.pdf', '.GIF','.JPG','.JPEG','.PNG','.DOC','.PDF', '') ;
// Extraction de l'extension
$extension = strrchr($_FILES['fichierjoint']['name'], '.');
// On verifie la présence d'une des extensions dans le nom du fichier
if (!in_array($extension, $ExtensionsAutorisees))
{
$AutoriseFichier = "non";
}
//Si une extension non désirée a été trouvée, on arrête l'envoi et on affiche un message d'erreur
if($AutoriseFichier=="non")
{
echo '<p><strong><font color="#FF0000">Vérifiez le fichier que vous voulez joindre, son extension </font><font color="#0000FF">'.$extension.'</font><font color="#FF0000"> n\'est pas acceptée.</font></strong></p>'."\n";
$message_erreur_formulaire = true;
}
else
{
// Si aucune des extensions n'a été trouvée, on continue...
if ( !empty($nomfichierjoint))
{
// ajout d'un texte à la saisie signalant un fichier joint
$messagepiecejointe .= "\n\n".'Ce courrier contient la pièce jointe : '.$nomfichierjoint."\n\n";
// ouverture du fichier joint uploadé en lecture
$f = fopen($fichier, "r") or die("ouverture du fichier $fichier impossible ...");
// récupération du code du fichier joint
$codefichier =fread($f, $taille);
// encodage standard en base 64
$codefichier = chunk_split(base64_encode($codefichier));
/*******************************************************
* dans le cas de l'envoi d'un fichier joint
* il convient de séparer le corps du message du fichier
* pour cela on utilise un identifiant de séparateur
*******************************************************/
// identifiant de séparateur, en principe unique
$limite = md5(uniqid(time() ));
/********************************************
* composition de l'en-tête du message :
* le message textuel suivi du code du fichier
*********************************************/
$entete .= 'Content-Type: multipart/mixed;boundary='.$limite."\r\n\r\n";
$entete .= '--'.$limite."\r\n";
$entete .= 'Content-transfer-encoding:8bit'."\r\n\r\n";
// puis on rajoute la pièce jointe au message
$messagefin .= '--'.$limite."\r\n";
$messagefin .= 'Content-type:'.$type.';name='.$nomfichierjoint."\r\n";
$messagefin .= 'Content-transfer-encoding:base64'."\r\n\r\n";
$messagefin .= ''.$codefichier."\r\n";
$messagefin .= '--'.$limite.'--';
} //fin ajout fichier joint
Voilà, si tu as une idée, elle est la bienvenue

Bonjour et merci,
Je n'ai qu'un seul code et il fonctionne parfaitement, sauf chez Alice. Quand il y a des pièces jointes images (les pdf et autres doc passent), l'expéditeur ne reçoit pas du tout de copie... S'il n'y a pas de fichier joint, il reçoit la copie.
C'est certainement dans l'entête en effet, mais je ne vois pas où car chez Hotmail par exemple, ça passe sans problème.
[php]/******************************
* partie générale de l'en-tête
******************************/
$entete = 'From: '.utf8_decode($nom).' '.utf8_decode($prenom).' <'.$email.'>' . "\r\n";
$entete .= 'MIME-Version: 1.0'."\r\n";
$entete .= 'Content-Type: text/html; charset=utf-8'."\r\n";
/**********************************
* En cas d'ajout d'un fichier joint
***********************************/
$fichier= $_FILES['fichierjoint']['tmp_name'];
$taille = $_FILES['fichierjoint']['size'];
$type = $_FILES['fichierjoint']['type'];
$nomfichierjoint = $_FILES['fichierjoint']['name'];
/*******************************************************************************
* On vérifie l'extension du fichier pour ne pas autoriser les fichiers à risques
********************************************************************************/
// Les extensions autorisées
$ExtensionsAutorisees = array('.gif','.jpg','.jpeg','.png','.doc','.pdf', '.GIF','.JPG','.JPEG','.PNG','.DOC','.PDF', '') ;
// Extraction de l'extension
$extension = strrchr($_FILES['fichierjoint']['name'], '.');
// On verifie la présence d'une des extensions dans le nom du fichier
if (!in_array($extension, $ExtensionsAutorisees))
{
$AutoriseFichier = "non";
}
//Si une extension non désirée a été trouvée, on arrête l'envoi et on affiche un message d'erreur
if($AutoriseFichier=="non")
{
echo '<p><strong><font color="#FF0000">Vérifiez le fichier que vous voulez joindre, son extension </font><font color="#0000FF">'.$extension.'</font><font color="#FF0000"> n\'est pas acceptée.</font></strong></p>'."\n";
$message_erreur_formulaire = true;
}
else
{
// Si aucune des extensions n'a été trouvée, on continue...
if ( !empty($nomfichierjoint))
{
// ajout d'un texte à la saisie signalant un fichier joint
$messagepiecejointe .= "\n\n".'Ce courrier contient la pièce jointe : '.$nomfichierjoint."\n\n";
// ouverture du fichier joint uploadé en lecture
$f = fopen($fichier, "r") or die("ouverture du fichier $fichier impossible ...");
// récupération du code du fichier joint
$codefichier =fread($f, $taille);
// encodage standard en base 64
$codefichier = chunk_split(base64_encode($codefichier));
/*******************************************************
* dans le cas de l'envoi d'un fichier joint
* il convient de séparer le corps du message du fichier
* pour cela on utilise un identifiant de séparateur
*******************************************************/
// identifiant de séparateur, en principe unique
$limite = md5(uniqid(time() ));
/********************************************
* composition de l'en-tête du message :
* le message textuel suivi du code du fichier
*********************************************/
$entete .= 'Content-Type: multipart/mixed;boundary='.$limite."\r\n\r\n";
$entete .= '--'.$limite."\r\n";
$entete .= 'Content-transfer-encoding:8bit'."\r\n\r\n";
// puis on rajoute la pièce jointe au message
$messagefin .= '--'.$limite."\r\n";
$messagefin .= 'Content-type:'.$type.';name='.$nomfichierjoint."\r\n";
$messagefin .= 'Content-transfer-encoding:base64'."\r\n\r\n";
$messagefin .= ''.$codefichier."\r\n";
$messagefin .= '--'.$limite.'--';
} //fin ajout fichier joint[/php]
Voilà, si tu as une idée, elle est la bienvenue :D