2010-07-10 4 views
0

J'ai un formulaire de base composé de champs de saisie ainsi que d'un champ de fichier. J'ai quelques choses que je veux que le formulaire fasse. Recueillir l'information (évidemment). Il y a aussi une option pour télécharger un fichier, (probablement .doc, .pdf, .docx), donc je veux restreindre le fichier joint uniquement à ces extensions et sous 2MB. Tout ce que je sais c'est que je dois avoir ma forme "enctype = multipart", mais c'est tout ce que je sais.Comment puis-je utiliser PHP pour envoyer une pièce jointe?

je le code PHP suivant:

<? 

$to = '[email protected]'; 
$subject = 'Contact from your website'; 
$message = 'From: ' . "\n\n" . 'Name: ' . $_REQUEST['name'] . "\n\n" . 'E-mail: ' . $_REQUEST['email'] . "\n\n" . 'Comments: ' . $_REQUEST['comments']; 
$email = $_REQUEST['email']; 
$headers = 'From: ' . $email . "\r\n" . 
      'Reply-To: ' . $email . "\r\n" . 
      'X-Mailer: PHP/' . phpversion(); 
$headers .= "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type: text/plain; charset=ISO-8859-1";  



$str = $_REQUEST['email']; 

if($str == "E-mail address" || $str == "") 
{ 
echo "Please use your browser's back button enter a valid E-mail address"; 

} else { 
mail ($to, $subject, $message, $headers); 
header("Location: thankyou.html"); 
} 

?> 

Comment puis-je modifier pour lui permettre d'envoyer le fichier joint?

Si possible, j'aimerais voir des exemples. S'il vous plaît comprenez que je suis extrêmement nouveau pour PHP, et jusqu'à présent, je n'ai pas besoin d'envoyer des formulaires web PHP avec une pièce jointe. Donc tout ce que je vous demande est que si vous postez un exemple, s'il vous plaît essayez de clarifier le code de formulaire HTML qui va fonctionner avec l'exemple.

Toute aide serait grandement appréciée!

Merci beaucoup, Amit

Répondre

1

Pour envoyer une pièce jointe par courrier électronique, vous pouvez utiliser des méthodes de structure ou écrire vous-même la méthode. Certains sample code peuvent être un good point to start.

Pour obtenir un fichier envoyé par le navigateur, vous devez utiliser la variable FICHIER. PHP documentation explique assez bien comment le faire.

Pour limiter les types de fichiers à .doc et .pdf, vous devez lire le début du fichier et le comparer à un fichier .doc ou .pdf "réel". Un moyen plus simple serait de comparer l'extension de fichier, mais l'utilisateur de votre site Web peut toujours renommer virus.exe en document.pdf.

0

Si vous avez accès à la bibliothèque PEAR, this'd faire ajouter des pièces jointes un jeu d'enfant. Jetez un oeil here.

+0

J'ai quelques questions ici: 1) Comment puis-je avoir accès à la bibliothèque PEAR/installer sur le serveur (ou est-il même jusqu'à moi ?!) 2) Dans le lien exemple que vous présentez , il indique comment attacher un fichier prédéterminé tel qu'une image. Je veux que le fichier joint soit un fichier que l'utilisateur télécharge depuis son ordinateur (juste pour clarifier les choses, je crée une base de données de CV, donc je veux que mes utilisateurs envoient leur CV via le formulaire). Est-ce que je remplacerai alors où il est dit «img here» avec $ file-attached ou quelque chose comme ça ?! – Amit

+0

Obtenir l'accès - si vous possédez le serveur et l'administrez vous-même, vous ne devriez pas avoir de problème pour l'installer - si vous ne demandez pas à votre hébergeur si PEAR est disponible (et si elle peut être mise à votre disposition). Vous n'êtes pas limité à ce que vous pouvez attacher - tout fichier ira bien, image ou non. –

+0

Merci pour cela. Mais comment puis-je faire quelque chose comme $ _REQUEST ['fichier'] à la place de ... vous savez?le fichier qui m'est envoyé est un fichier qui est sur leur ordinateur, pas déjà sur mon serveur – Amit

1

n'ont pas été testés mais cela devrait fonctionner en théorie.

Utilisez ce code qui utilise des tampons. (Code Source: http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php)

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test email with attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string, 
//encode it with MIME base64, 
//and split it into smaller chunks 
$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip'))); 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="attachment.zip" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail($to, $subject, $message, $headers); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?> 
+0

Il y a quelques failles avec le code. De toute façon, j'ai essayé, ça n'a pas marché. Merci d'avoir essayé. – Amit

1

Utilisez PHPMailer. C'est gratuit, fonctionne bien et rend l'utilisation des pièces jointes un jeu d'enfant. J'ai vu Swiftmailer mentionné beaucoup ici sur SO aussi, mais ne l'ai pas utilisé moi-même, donc je ne peux pas en dire beaucoup à ce sujet.

+0

Je ne comprends pas très bien comment utiliser PHPMailer. Y a-t-il des exemples de fichiers qui montrent quoi faire ?! – Amit

+0

Sur le site PHPMailer, dans la barre de menus, sélectionnez Produits -> PHP Mailer -> Exemples PHPMailer. Il y a beaucoup de choses, des choses de base aux configurations spécifiques du serveur SMTP –