Bonjour,
J'essaye depuis un certain temps d'envoyer des mails avec pièce jointe en PHP et à des destinataires multiples. Je croyais avoir réussi quand je me suis rendu compte que mon script ne fonctionnait que sur gmail ! Sur mes autres adresses de messagerie la pièce jointe est VIDE ! Quelle serait la différence entre gmail, hotmail, 9online et les autres ?! Je suis dépitée
Mon site est actuellement en ligne, hébergé par olympe-network, dans sa formule gratuite.
Vous voulez mon code ?
Voilà le formulaire :
<form method="POST" action="admin.php" enctype="multipart/form-data">
<p>Destinataire(s): <input type="text" name="destinataire" size="70" value="<?php echo $mail; ?>" /></p>
<p>Expéditeur : <input type="text" name="expediteur" size="50" value='Machin MACHIN <[email protected]>' /></p>
<p>Sujet : <input type="text" name="sujet" size="70" /></p>
<p>Fichier joint:
<input type="hidden" name="MAX_FILE_SIZE" value="8000000" /><input name="Nomfichier" type="file" size="16" /></p>
<table>
<tr>
<td>
Message :</td><td> <textarea rows="12" cols="60 "name="message"></textarea>
</td>
</tr>
</table>
<p><input type="submit" value="Envoyer" /></p>
</form>
...Et le PHP :
if(isset($_POST['destinataire']) AND (isset($_POST['expediteur'])) AND (isset($_POST['message']))){ //Si les champs du mail sont remplis
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $_SESSION['mail'])) // Utilisation de \r\n ou de \n selon fai
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
if (isset($_FILES['Nomfichier']['name']) AND $_FILES['Nomfichier']['error'] == 0) //Si on a un fichier
{
$filename=$_FILES['Nomfichier']['name'];
$extension=strrchr($filename,'.'); //je cherche l'extension du fichier à joindre
$extension=substr($extension,1) ;
$_FILES['Nomfichier']['name'] = 'piece_jointe.'.$extension; //on renomme le fichier
move_uploaded_file($_FILES['Nomfichier']['tmp_name'], basename($_FILES['Nomfichier']['name'])); // Enregistrement du fichier
}
else {
echo 'L: 346'.$_FILES['Nomfichier']['error'];
}
$message=nl2br(htmlentities($_POST['message']));
// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));
// Headers
$headers = "From: ".$_POST['expediteur'].$passage_ligne;
$headers .= "Reply-to: ".$_POST['expediteur'].$passage_ligne;
$headers .= 'MIME-Version: 1.0'.$passage_ligne;
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary.$passage_ligne;
// Texte
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:text/plain;charset=ISO-8859-1'.$passage_ligne;
$msg .= $message . $passage_ligne;
// Pièce jointe
if($extension=="pdf" OR $extension=="PDF"){ //On cherche le nom de la pièce jointe (jai bien essayé autrement mais je n'ai pas réussi...)
$file_name = 'piece_jointe.pdf';
}
elseif($extension=="jpeg" OR $extension=="JPEG"){
$file_name = 'piece_jointe.jpeg';
}
elseif($extension=="jpg" OR $extension=="JPG"){
$file_name = 'piece_jointe.jpg';
}
elseif($extension =="zip" OR $extension=="ZIP"){
$file_name = 'piece_jointe.zip';
}
elseif($extension =="png" OR $extension=="PNG"){
$file_name = 'piece_jointe.png';
}
elseif($extension == "gif" OR $extenion=="GIF"){
$file_name = 'piece_jointe.gif';
}
elseif($extension == "odt" OR $extension=="ODT"){
$file_name = 'piece_jointe.odt';
}
elseif($extension == "xls" OR $extension=="XLS"){
$file_name = 'piece_jointe.xls';
}
elseif($extension == "txt" OR $extension=="TXT"){
$file_name = 'piece_jointe.txt';
}
else {
echo 'extension non reconnue';
}
if (file_exists($file_name))
{
$file_type = filetype($file_name);
$file_size = filesize($file_name);
$finfo = finfo_open(FILEINFO_MIME_TYPE); // Retourne le type mime à la extension mimetype
echo 'type de fichier : '.finfo_file($finfo, $file_name);
finfo_close($finfo);
$content = file_get_contents($file_name);
$content = chunk_split(base64_encode($content));
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:'.finfo_file($finfo, $file_name).';name='.basename($file_name).$passage_ligne;
$msg .= 'Content-Transfer-Encoding:base64'.$passage_ligne;
$msg .= 'Content-Disposition: attachment; filename='.$file_name.$passage_ligne;
$msg .= $content.$passage_ligne;
}
// Fin
$msg .= '--'.$boundary.'--';
// Function mail()
mail($_SESSION['mail'], $_POST['sujet'], $msg, $headers);
}
...Et c'est le drame !
Ce code est le fruit d'une bonne galère, il doit en résulter des choses étranges, mais il est à deux doigts de fonctionner, je crois.
Ne me parlez pas de phpmailer, jy ai passé beaucoup de temps aussi, il a temporairement fonctionné, puis plus du tout... je comprends rien. J'ai vu sur des forums que le problème viendrait de olympe-network, mais pourtant ça a fonctionné et le code posté fonctionne plus ou moins aussi.
Aussi je crois que hier j'ai passé beaucoup de temps à me rendre compte que j'avais atteint une limite de mails envoyés
Tout ça pour dire que même un soutient moral serait le bienvenu, hehe
Je vous remercie énormément !
Et je suis à votre service pour des précisions, le site que je fais est le sujet d'un stage, je suis bloqué, j'attends vos réponses avec impatience !
Bonjour,
J'essaye depuis un certain temps d'envoyer des mails avec pièce jointe en PHP et à des destinataires multiples. Je croyais avoir réussi quand je me suis rendu compte que mon script ne fonctionnait que sur gmail ! Sur mes autres adresses de messagerie la pièce jointe est VIDE ! Quelle serait la différence entre gmail, hotmail, 9online et les autres ?! Je suis dépitée :|
Mon site est actuellement en ligne, hébergé par olympe-network, dans sa formule gratuite.
Vous voulez mon code ?
Voilà le formulaire :
[html]
<form method="POST" action="admin.php" enctype="multipart/form-data">
<p>Destinataire(s): <input type="text" name="destinataire" size="70" value="<?php echo $mail; ?>" /></p>
<p>Expéditeur : <input type="text" name="expediteur" size="50" value='Machin MACHIN <
[email protected]>' /></p>
<p>Sujet : <input type="text" name="sujet" size="70" /></p>
<p>Fichier joint:
<input type="hidden" name="MAX_FILE_SIZE" value="8000000" /><input name="Nomfichier" type="file" size="16" /></p>
<table>
<tr>
<td>
Message :</td><td> <textarea rows="12" cols="60 "name="message"></textarea>
</td>
</tr>
</table>
<p><input type="submit" value="Envoyer" /></p>
</form>[/html]
...Et le PHP :
[php]
if(isset($_POST['destinataire']) AND (isset($_POST['expediteur'])) AND (isset($_POST['message']))){ //Si les champs du mail sont remplis
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $_SESSION['mail'])) // Utilisation de \r\n ou de \n selon fai
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
if (isset($_FILES['Nomfichier']['name']) AND $_FILES['Nomfichier']['error'] == 0) //Si on a un fichier
{
$filename=$_FILES['Nomfichier']['name'];
$extension=strrchr($filename,'.'); //je cherche l'extension du fichier à joindre
$extension=substr($extension,1) ;
$_FILES['Nomfichier']['name'] = 'piece_jointe.'.$extension; //on renomme le fichier
move_uploaded_file($_FILES['Nomfichier']['tmp_name'], basename($_FILES['Nomfichier']['name'])); // Enregistrement du fichier
}
else {
echo 'L: 346'.$_FILES['Nomfichier']['error'];
}
$message=nl2br(htmlentities($_POST['message']));
// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));
// Headers
$headers = "From: ".$_POST['expediteur'].$passage_ligne;
$headers .= "Reply-to: ".$_POST['expediteur'].$passage_ligne;
$headers .= 'MIME-Version: 1.0'.$passage_ligne;
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary.$passage_ligne;
// Texte
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:text/plain;charset=ISO-8859-1'.$passage_ligne;
$msg .= $message . $passage_ligne;
// Pièce jointe
if($extension=="pdf" OR $extension=="PDF"){ //On cherche le nom de la pièce jointe (jai bien essayé autrement mais je n'ai pas réussi...)
$file_name = 'piece_jointe.pdf';
}
elseif($extension=="jpeg" OR $extension=="JPEG"){
$file_name = 'piece_jointe.jpeg';
}
elseif($extension=="jpg" OR $extension=="JPG"){
$file_name = 'piece_jointe.jpg';
}
elseif($extension =="zip" OR $extension=="ZIP"){
$file_name = 'piece_jointe.zip';
}
elseif($extension =="png" OR $extension=="PNG"){
$file_name = 'piece_jointe.png';
}
elseif($extension == "gif" OR $extenion=="GIF"){
$file_name = 'piece_jointe.gif';
}
elseif($extension == "odt" OR $extension=="ODT"){
$file_name = 'piece_jointe.odt';
}
elseif($extension == "xls" OR $extension=="XLS"){
$file_name = 'piece_jointe.xls';
}
elseif($extension == "txt" OR $extension=="TXT"){
$file_name = 'piece_jointe.txt';
}
else {
echo 'extension non reconnue';
}
if (file_exists($file_name))
{
$file_type = filetype($file_name);
$file_size = filesize($file_name);
$finfo = finfo_open(FILEINFO_MIME_TYPE); // Retourne le type mime à la extension mimetype
echo 'type de fichier : '.finfo_file($finfo, $file_name);
finfo_close($finfo);
$content = file_get_contents($file_name);
$content = chunk_split(base64_encode($content));
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:'.finfo_file($finfo, $file_name).';name='.basename($file_name).$passage_ligne;
$msg .= 'Content-Transfer-Encoding:base64'.$passage_ligne;
$msg .= 'Content-Disposition: attachment; filename='.$file_name.$passage_ligne;
$msg .= $content.$passage_ligne;
}
// Fin
$msg .= '--'.$boundary.'--';
// Function mail()
mail($_SESSION['mail'], $_POST['sujet'], $msg, $headers);
}
[/php]
...Et c'est le drame !
Ce code est le fruit d'une bonne galère, il doit en résulter des choses étranges, mais il est à deux doigts de fonctionner, je crois.
Ne me parlez pas de phpmailer, jy ai passé beaucoup de temps aussi, il a temporairement fonctionné, puis plus du tout... je comprends rien. J'ai vu sur des forums que le problème viendrait de olympe-network, mais pourtant ça a fonctionné et le code posté fonctionne plus ou moins aussi.
Aussi je crois que hier j'ai passé beaucoup de temps à me rendre compte que j'avais atteint une limite de mails envoyés
Tout ça pour dire que même un soutient moral serait le bienvenu, hehe
Je vous remercie énormément !
Et je suis à votre service pour des précisions, le site que je fais est le sujet d'un stage, je suis bloqué, j'attends vos réponses avec impatience !