2012-03-30 2 views
0

Я работаю над формой-почтой, которая включает в себя загрузку файла, но файл вообще не отображается в тестовом E-mail. Я настраивал и повторно настраивал, но безрезультатно , Какие-либо предложения?Проблема с отправкой файла PHP

HTML-часть формы, как показано ниже

<div class="contactleft"> 


     <form action="former.php" method="post" enctype="multipart/form-data" id="former"> 

     <div class="textbox"><span id="sprytextfield1"> 
      <label for="fname"></label> 
      <input name="fname" type="text" class="inputer" id="fname" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield2"> 
      <label for="lname"></label> 
      <input name="lname" type="text" class="inputer" id="lname" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield3"> 
      <label for="email"></label> 
      <input name="email" type="text" class="inputer" id="email" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield4"> 
      <label for="file"></label> 
      <label for="file"></label> 
      <label for="fileField"></label> 
      <input type="file" name="fileField" id="fileField" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 


     <div class="textbox"> 
      <label for="sender"></label> 
      <input type="submit" name="sender" id="sender" value="click to send message" /> 
     </div><!-- End TextBox --> 

      </form> 

    </div> 

и почтовая программа, как показано ниже

<? 
    $mailto = '[email protected]'; // insert the email address you want the form sent to 
    //$returnpage = 'thanks.php'; // insert the name of the page/location you want the user to be returned to// 
    $sitename = '[siteripe.com]'; // insert the site name here, it will appear in the subject of your email 

/* Do not edit below this line unless you know what you're doing */ 

    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $email = $_POST['email'] ; 
    $file = $_POST['file']; 
    $subject = $_POST['subject']; 


    if (!eregi("^[a-z0-9]+([-_\.]?[a-z0-9])[email protected][a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)){ 
    print("<strong>Error:</strong> this email address is not in a valid format.<br/><br/><a href='javascript:history.go(-1)'>Back</a>"); 
     exit; 
    } 

    $message = "\n$name submitted the following message:\n\n$message\n\n$name's contact details are as follows:\n\nFirst Name: $fname\nLast Name: $lname\nEmail Address: $email\nForm: $file"; 

    mail($mailto, "$subject", $message, "From: $email"); 

?> 
+0

почты функция возвращает истину на успех Ьгу $ вар = почте .. и увидеть ответную –

+0

Ну, $ _POST [ «файл»] всегда будет терпеть неудачу, так как ваш входной файл загрузки называется 'fileField'. Попробуйте $ _POST ['fileField'], если вы после имени файла. –

ответ

1

Вы не можете просто передать $ файл как часть сообщения $ без добавления дополнительных заголовков, указывающих, что электронное письмо является «многочастным» электронным письмом с файлом $ file в качестве вложения.

Если вы хотите использовать ванильный PHP, посмотрите на функцию docs для функции mail(), есть некоторые комментарии, которые показывают, как делать то, что вы просите.

Если вы хотите посмотреть стороннюю библиотеку, я бы предложил Zend Framework, у них есть класс Zend_Mail_Attachment, который обеспечивает чистый интерфейс для отправки электронной почты с приложением.

0

Попробуйте изменить:

$file = $_POST['file']; 

к:

$file = $_POST['fileField']; 
0

Это должно работать:

<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
<? 
if(count($_POST) > 0){ 
    $mailto = '[email protected]'; // insert the email address you want the form sent to 
    //$returnpage = 'thanks.php'; // insert the name of the page/location you want the user to be returned to// 
    $sitename = '[siteripe.com]'; // insert the site name here, it will appear in the subject of your email 

/* Do not edit below this line unless you know what you're doing */ 

    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $name = $lname . ', ' . $fname; 
    $email = $_POST['email'] ; 
    $subject = (array_key_exists('subject', $_POST))?$_POST['subject']:'Default subject'; 


    if ([email protected]("^[a-z0-9]+([-_\.]?[a-z0-9])[email protected][a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)){ 
    print("<strong>Error:</strong> this email address is not in a valid format.<br/><br/><a href='javascript:history.go(-1)'>Back</a>"); 
     exit; 
    } 

    $message = "\n$name submitted the following message:\n\n...\n\n$name's contact details are as follows:\n\nFirst Name: $fname\nLast Name: $lname\nEmail Address: $email"; 


    $rand = md5(time()); 
    $mime_boundary = '==Multipart_Boundary_x' . $rand . 'x'; 

    if(array_key_exists('fileField', $_FILES)){ 
     if(is_file($_FILES['fileField']['tmp_name'])){ 
      $message .= "--{$mime_boundary}\n"; 
      $fp = @fopen($_FILES['fileField']['tmp_name'],"rb"); 
     $data = @fread($fp,filesize($_FILES['fileField']['tmp_name'])); 
        @fclose($fp); 
      $data = chunk_split(base64_encode($data)); 
      $message .= "Content-Type: application/octet-stream; name=\"".$_FILES['fileField']['tmp_name']."\"\n" . 
      "Content-Description: ".$_FILES['fileField']['name']."\n" . 
      "Content-Disposition: attachment;\n" . " filename=\"".$_FILES['fileField']['name']."\"; size=".filesize($_FILES['fileField']['tmp_name']).";\n" . 
      "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
      } 
     } 
    $message .= "--{$mime_boundary}--"; 

    $headers = 'From: ' . $email; 
    mail($mailto, "$subject", $message, $headers); 
} 
?> 
<div class="contactleft"> 
     <form action="" method="post" enctype="multipart/form-data" id="former"> 
     <div class="textbox"><span id="sprytextfield1"> 
      <label for="fname"></label> 
      <input name="fname" type="text" class="inputer" id="fname" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield2"> 
      <label for="lname"></label> 
      <input name="lname" type="text" class="inputer" id="lname" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield3"> 
      <label for="email"></label> 
      <input name="email" type="text" class="inputer" id="email" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"><span id="sprytextfield4"> 
      <label for="file"></label> 
      <label for="file"></label> 
      <label for="fileField"></label> 
      <input type="file" name="fileField" id="fileField" /> 
      <span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox --> 
     <div class="textbox"> 
      <label for="sender"></label> 
      <input type="submit" name="sender" id="sender" value="click to send message" /> 
     </div><!-- End TextBox --> 
      </form> 
    </div> 
    </body> 
</html> 
+0

Некоторые изменения в вашем коде были сделаны потому, что было несколько ошибок E_NOTICE ... –

0

Также я вижу, вы делаете вызов функции почты(), но $ файлов не в этом. Я лично использую класс phpmailer, затем вы объявляете почтовый объект и добавляете к нему компоненты.

// SEND THANK YOU EMAIL 
include('class.phpmailer.php'); 
$mail = new PHPMailer(); 
// Sender is the Reply-Path address; seems important 
$mail->Sender = "[email protected]"; 
$mail->From  = "[email protected]"; 
$mail->FromName = "Ca Cycleworks automated e-mail"; 
// $mail->AddAddress() is the To: 
$blahtext=stripslashes($_SESSION['address_info']['b_first_name'])." ".stripslashes($_SESSION['address_info']['b_last_name']); 
$mail->AddAddress($_SESSION['address_info']['b_email'],$blahtext); 
$mail->AddReplyTo("[email protected]", "Ca Cycleworks Orders"); 
$subject = "Your Ca-Cycleworks.com Order # ".$_SESSION['order_number']." confirmation"; 
$mail->Subject = $subject; 
$mail->AltBody = $text_body; 
// ISO 8859-1 summary: http://www.btinternet.com/~andrew.murphy/html_character_set.html 
// 
// $Encoding 
//  PHPMailer::$Encoding in class.phpmailer.php 
//  Sets the Encoding of the message. Options for this are "8bit", "7bit", "binary", "base64", and "quoted-printable". 
// string $ContentType = "text/plain" (line 42) 
// False Sets ContentType = "text/html" or "text/plain" 
//$mail->IsHTML(false); 
$mail->Body = $body; 
$mail->IsSMTP(); 
$mail->SMTPAuth = true; 
$mail->Username = "[email protected]"; 
$mail->Password = "xxxxxxxxxxxx"; 
Смежные вопросы