2010-07-14 5 views
2

J'ai créé un dossier "uploads" sur le serveur, et un fichier téléchargé par un utilisateur sur le formulaire HTML, obtient dans ce dossier très bien. Ensuite, j'essaie de le récupérer dans ce dossier et de le joindre à un e-mail, mais cette partie ne fonctionne pas. Voici mon PHP:Envoi de pièces jointes via le formulaire HTML en utilisant PHP

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$form_subject = $_POST['form_subject']; 
$message = $_POST['message']; 


//File upload 

// Where the file is going to be placed 
$target_path = "uploads/"; 

/* Add the original filename to our target path. 
Result is "uploads/filename.extension" */ 
$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "The file ". basename($_FILES['uploadedfile']['name']). 
    " has been uploaded"; 
} else{ 
    echo "There was an error uploading the file, please try again!"; 
} 

//End of file upload 


[email protected]$REMOTE_ADDR; 
$date=date("l, F j, Y, g:i a"); 

$to = "[email protected]"; 
$subject = "New data submitted!"; 
$body = "Here is the information submitted to 
www.polycysticliverdisease.com/html/pld_form.php 
from $ip on $date.\n\n 
--------------------------------\n\n 
name: $name \n\n 
email address: $email \n\n 
subject: $form_subject \n\n 
comment: $message"; 
//mail($to, $subject, $body); 

// Obtain file upload vars  
$fileatt  = $_FILES['uploadedfile']['tmp_name'];  
$fileatt_type = $_FILES['uploadedfile']['type'];  
$fileatt_name = $_FILES['uploadedfile']['name']; 

if (is_uploaded_file($fileatt)) {  
// Read the file to be attached ('rb' = read binary)  
$file = fopen($fileatt,'rb');  
$data = fread($file,filesize($fileatt));  
fclose($file); 

// Generate a boundary string  
$semi_rand = md5(time());  
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";  

// Add the headers for a file attachment  
$headers .= "\nMIME-Version: 1.0\n" .  
      "Content-Type: multipart/mixed;\n" .  
      " boundary=\"{$mime_boundary}\""; 

// Add a multipart boundary above the plain message  
$message = "This is a multi-part message in MIME format.\n\n" .  
      "--{$mime_boundary}\n" .  
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .  
      "Content-Transfer-Encoding: 7bit\n\n" .  
      $message . "\n\n"; 

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

// Add file attachment to the message  
$message .= "--{$mime_boundary}\n" .  
      "Content-Type: {$fileatt_type};\n" .  
      " name=\"{$fileatt_name}\"\n" .  
      "Content-Disposition: attachment;\n" .  
      " filename=\"{$fileatt_name}\"\n" .  
      "Content-Transfer-Encoding: base64\n\n" .  
      $data . "\n\n" .  
      "--{$mime_boundary}--\n";  
} 

// Send the message  
$ok = @mail($to, $subject, $body, $headers);  
if ($ok) {  
echo "<p>Mail sent! Yay PHP!</p>";  
} else {  
echo "<p>Mail could not be sent. Sorry!</p>";  
} 

?> 

Voici mon contrôle de téléchargement de fichiers HTML:

<input type="submit" name="submit" class="submit" /> 
<input type="file" name="uploadedfile" class="upload" /> 

Merci!

Répondre

2

Je voudrais utiliser une bibliothèque de diffusion - peut-être Swiftmailer. La programmer vous-même n'en vaut pas la peine (si vous ne le faites pas pour étudier, bien sûr).

+0

Merci beaucoup, beaucoup! Cela a fonctionné à merveille. J'aime Swiftmailer! Mais quand je mis en place un corps pour mon email, j'utilise un mélange de texte et variables: $ message-> sera crée en ('Voici les informations soumises à www.polycysticliverdisease.com/html/pld_form.php de $ ip on $ date. \ n \ n nom: $ nom \ n \ n adresse e-mail: $ email \ n \ n sujet: $ form_subject \ n \ n commentaire: $ form_message ',' text/html ') Toutes les variables sont déclarées et affectées de bonnes valeurs. Mais eux et le '\ n \ n' apparaissent tous dans l'e-mail envoyé comme faisant partie du texte, c'est-à-dire qu'ils ne sont pas reconnus comme des variables. Pourquoi? – vlevsha

+0

@vlevsha parce que vous utilisez des guillemets simples. Utilisez des guillemets doubles. – Unicron

+0

Merci, je l'ai fait avant même que j'ai vu votre réponse. :) Maintenant, j'ai un problème beaucoup plus grave: http://stackoverflow.com/questions/3290966/retrieving-a-file-name-to-attach-to-an-email-with-swiftmailer- et-php – vlevsha

0

Utilisez un package de publipostage prédéfini tel que SwiftMailer ou PHPMailer. Les deux peuvent gérer les pièces jointes facilement.

+0

Merci! J'ai choisi SwiftMailer. J'ai adoré! – vlevsha

Questions connexes