Aller au contenu

Envoi de mail avec fichier en PHP


Sujets conseillés

Posté

Bonjour.

Je suis sur OVH (pour situer l'environnement)

Dans le même dossier j'ai :

- mon fichier mail3.php avec le formulaire

<html>
<body>

<form ENCTYPE="multipart/form-data" action="./mail4.php" method=POST>
<center>
De: <input type=text name = "from" size="30"><br>
Destinataire: <input type=text name = "to" size="30"><br>
Sujet: <input type=text name = "sujet" size="30"><br><br>
Texte :<br><textarea name="message" rows="15" cols="40"></textarea><br>
<INPUT TYPE=FILE NAME="monfichier"><BR>
<input type=submit value="envoi">
</center>
</form>

</body>
</html>

- ma page mail4.php qui m'envoie les infos

<html>
<body> <center>
<?

$name_file = $_FILES['monfichier']['name'];
$source=$_FILES['monfichier']['tmp_name'];

move_uploaded_file($source, "./".$name_file);

$extension=get_extension($name_file);

$type="text/plain";
if($type=="doc")
{
  $type="text/vnd.ms-word";
}
else if($type=="xls")
{
  $type="text/vnd.ms-excel";
}

$type2="image/png";

if($extension=="gif")
{
  $type2="image/gif";
}
else if($extension=="bmp")
{
  $type2="image/bmp";
}

function get_extension($filename)
{
  $parts = explode('.',$filename);
  $last = count($parts) - 1;
  $ext = $parts[$last];
  return $ext;
}

//----------------------------------
// Construction de l'entête
//----------------------------------

if($_POST['to']!="")
{
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";

$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

$msg .= "--$boundary\r\n";

$msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .= $_POST['message'];
$msg .= "\r\n";

if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");  
$attachment = fread($fp, filesize($file));
fclose($fp);

$attachment = chunk_split(base64_encode($attachment));


$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}

$destinataire = $_POST['to'];
$expediteur   = $_POST['from'];
$reponse      = $expediteur;
echo "Mail envoyé à $destinataire";

mail($destinataire, $_POST['sujet'], $msg,
    "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);

}

if($name_file!="")
{
unlink($name_file);
}
print("<br>\n");
print("<br><A href=./mail3.php target=\"principal\"><font size=2>Envoyer un autre mail</font></A>");
?>
</center>
</body>
</html>

Quand je cliques sur "envoie" je reçois bien le mail... mais j'ai un problème avec le fichier. Il n'est pas en pièce jointe mais contenu dans le corps du mail... en gros j'ai une suite incessante de caractère :huh:

Quelqu'un voit-il où est l'erreur ? j'ai beau chercher et je ne trouve pas :o

Si vous trouvez je serait soulagé parce que le client ne va pas tarder à revenir à la charge :wacko:

Merci d'avance :)

Posté

Salut,

As-tu essayé en remplaçant tous tes "\r\n" par "\n" ?

J'ai dû modifier des scripts en ce sens pour les faire fonctionner sur le qmail d'OVH standard.

"my 2 cents" :?:

Dan

Posté

Ca fonctionne :fete:

Merci beaucoup :wub:

Mais par contre avec les gros fichiers ça plante :unsure: je reçois un petit fichier tout pourri (genre 60 octets pour un fichier qui fait 2Mo à la base.) J'imagine que c'est OVH qui bride non ? Ou alors c'est une astuce ?

Posté

Je m'en doutais :) Alzheimer ne me guette pas encore, ma mémoire est toujours bonne :whistling:

Pour les gros fichiers, je pense que la limite par défaut pour le téléchargement de fichiers avec php fait justement 2Mb ... Et comme tu es sur hébergement mutualisé tu ne pourras pas la changer.

Il faut peut-être envisager de "saucissonner" les gros fichiers ?

Dan

Posté
Il faut peut-être envisager de "saucissonner" les gros fichiers ?

:blink: Oula, tu entend quoi par la ?

En tout cas merci :hourra:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...