2009-09-29 13 views
1

J'essaie de créer un formulaire de courriel qui vous permet d'envoyer une pièce jointe. J'ai assemblé du code à partir de mon livre PHP et de plusieurs sites Web.Envoyer une pièce jointe avec php

Lorsque j'envoie l'e-mail à l'aide de ce formulaire, la pièce jointe est corrompue et les "commentaires $" ne semblent pas fonctionner.

Voici le code que je utilise:

<?php 
$to = $_POST['to']; 
$from = $_POST['from']; 
$re = $_POST['re']; 
$comments= $_POST['comments']; 

$att = $_FILES['att']; 
$att_path= $_FILES['att']['tmp_name']; 
$att_name = $_FILES['att']['name']; 
$att_size = $_FILES['att']['size']; 
$att_type = $_FILES['att']['type']; 

//open, read, then close the file 
$fp = fopen($att_path, "rb"); 
$file = fread($fp, $att_size); 
fclose($fp); 

#create a boundary string 
$num = md5(time()); 
$str = "==Multipart_Boumdary_x{$num}x"; 

//encode the data for transit 
$file = chunk_split(base64_encode($file)); 

//define header 
$hdr = "MIME-Versio: 1.0\r\n"; 
$hdr .= "Content-Type: multipart/mixed; "; 
$hdr .= "boundary=\"{$str}\"\r\n"; 
$hdr .= "From: $from \r\n"; 

#define message 
$msg = "This is a multi-part message in MIME format\r\n\n"; 
$msg .= "--{$str}\r\n"; 
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; 
$msg .= "Content-Transfer-Encoding: 8bit\r\n"; 
$msg .= "$comments\r\n\n"; 
$msg .= "--{$str}\r\n"; 

#define the non-text attatchment 
$msg .= "Content-Type: {$att_type}; "; 
$msg .= "name=\"{$att_name}\"\r\n"; 
$msg .= "Content-Disposition: attachment; "; 
$msh .= "filename=\"{$att_name}\"\r\n"; 
$msg .= "Content-Transfer-Encoding: base64\r\n"; 
$msg .= "$file\r\n\n"; 
$msg .= "--{$str}"; 

#sendmail 
$ok = mail($to, $re, $msg, $hdr); 
if($ok) echo "OK"; 

?> 

Alors, qu'est-ce que je fais mal?

Merci!

+0

Voir la classe Mail_Mime dans le projet PEAR, http://pear.php.net/package/Mail_Mime –

Répondre

0

Essayez ceci pour encoder votre fichier pour le transit.

Remplacez la ligne:

$file = chunk_split(base64_encode($file)); 

Avec:

//Encode the file for transit 
    $content = ''; 
    $fp = fopen($att_path, 'r'); 
    do { 
    $data = fread($fp, 8192); 
    if (strlen($data) == 0) break; 
    $content .= $data; 
    } while (true); 
    $file = chunk_split(base64_encode($content)); 
+0

Ce code semble juste mettre la pièce jointe dans le texte du message. – lanrat

2
+0

Swift Mailer semble bien cependant, la proposition de ceci est pour moi d'améliorer mes compétences en PHP, donc je voudrais savoir ce que j'ai fait de mal afin que je puisse l'améliorer. – lanrat

+0

Vous pouvez vérifier leurs sources, ils ont des méthodes pratiques pour ajouter toutes sortes de pièces jointes. – Kane

0
$str = "==Multipart_Boumdary_x{$num}x"; 

Nous espérons que vous avez essayé (notez l'orthographe de Boundary):

$str = "==Multipart_Boundary_x{$num}x"; 
+0

Merci, j'ai réparé ça mais j'ai toujours le même problème. – lanrat

Questions connexes