2012-03-30 5 views
0

파일 업로드를 포함하는 양식 메일러에서 작업하고 있지만 테스트 전자 메일에 파일이 표시되지 않습니다. 나는 조정 및 재조정했지만 아무 소용이 없습니다. . 어떤 제안?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

메일 기능은 .. 성공 시도의 $ var에 = 메일에 true를 돌려 항상 실패합니다 응답 –

+0

음, $ _POST [ '파일']를 참조하십시오. 파일 이름 뒤에있는 경우 $ _POST [ 'fileField']를 사용해보십시오. –

답변

1

$ file을 첨부 파일로 사용하여 전자 메일이 'multi-part'전자 메일임을 나타내는 추가 헤더를 추가하지 않고 $ file의 일부로 $ file을 전달할 수 없습니다.

바닐라 PHP를 사용하려면 mail() 함수에 docs을 살펴보십시오. 요청하는 것을 수행하는 방법을 보여주는 몇 가지 설명이 있습니다.

타사 라이브러리를보고 싶다면 젠드 프레임 워크에 첨부 파일이있는 전자 메일을 보내기위한 깨끗한 인터페이스를 제공하는 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 클래스를 사용하고 메일 객체를 선언 한 다음 구성 요소를 추가합니다. 파일 업로드 입력이`fileField`라는부터

// 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";