2012-03-30 29 views
0

私はファイルアップロードを含むフォームメーラーに取り組んでいますが、ファイルはテストEメールには表示されません。私は微調整して再調整しましたが、役に立たない。助言がありますか?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を返し、あなたのファイルアップロード入力が 'fileField'命名されているので、応答 –

+0

まあ、$ _POST [「ファイル」]は常に失敗します参照してください。あなたがファイル名の後ろにいるなら、$ _POST ['fileField']を試してください。 –

答えて

1

$ファイルの一部として$ fileを渡すことはできません。追加のヘッダーを追加しないと、電子メールは「マルチパート」電子メールであり、$ fileが添付ファイルであることを示します。

vanilla PHPを使いたい場合は、mail()関数のdocsを見てください。あなたが求めていることを示すいくつかのコメントがあります。

サードパーティ製のライブラリを見たい場合は、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"; 
関連する問題