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é
Mon site est actuellement en ligne, hébergé par olympe-network, dans sa formule gratuite.
Vous voulez mon code ?
Voilà le formulaire :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
<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 <machin@machin.fr>' /></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> |
Le code PHP :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
if(isset($_POST['destinataire']) AND (isset($_POST['expediteur'])) AND (isset($_POST['message']))){
//Il parait qu'il y a des soucis de passage de ligne selon des boites mail, alors :
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $_SESSION['mail']))
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//Mise en ligne de la pièce jointe
if (isset($_FILES['Nomfichier']['name']) AND $_FILES['Nomfichier']['error'] == 0)
{
$filename=$_FILES['Nomfichier']['name'];
$extension=strrchr($filename,'.');
$extension=substr($extension,1) ;
$_FILES['Nomfichier']['name'] = 'piece_jointe.'.$extension;
move_uploaded_file($_FILES['Nomfichier']['tmp_name'], basename($_FILES['Nomfichier']['name']));
}
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;
$headers .= $passage_ligne;
// Message
$msg = 'This is a multipart/mixed message.'.$passage_ligne.$passage_ligne;
// Texte
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:text/html;charset=utf-8'.$passage_ligne;
$msg .= 'Content-transfer-encoding:8bit'.$passage_ligne;
$msg .= $message.$passage_ligne;
// Nom de la pièce jointe... j'ai pas pu faire autrement
if($extension=="pdf"){
$file_name = 'piece_jointe.pdf';
}
elseif($extension=="jpeg"){
$file_name = 'piece_jointe.jpeg';
}
elseif($extension=="jpg"){
$file_name = 'piece_jointe.jpg';
}
elseif($extension =="zip"){
$file_name = 'piece_jointe.zip';
}
elseif($extension =="png"){
$file_name = 'piece_jointe.png';
}
elseif($extension == "gif"){
$file_name = 'piece_jointe.gif';
}
elseif($extension == "odt"){
$file_name = 'piece_jointe.odt';
}
elseif($extension == "xls"){
$file_name = 'piece_jointe.xls';
}
elseif($extension == "txt"){
$file_name = 'piece_jointe.txt';
}
else {
echo 'extension non reconnue';
}
//Je colle la pièce jointe à mon mail
if (file_exists($file_name))
{
$file_type = filetype($file_name);
$file_size = filesize($file_name);
$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$f = fclose($handle);
$msg .= '--'.$boundary.$passage_ligne;
$msg .= 'Content-type:'.mime_content_type($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;
}
$msg .= '--'.$boundary.$passage_ligne;
//Puis ça part !
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 !