2016-03-24 22 views
0

私の連絡先フォームで複数の添付ファイルを送信できるようにしたいのですが、[email protected]で添付ファイルをいくつでも送信すると、それらを別々の添付ファイルとして扱う方法を理解していない。phpフォームの添付ファイルがファイルの代わりに配列として送信されています

HTMLコード

<form id="contact-form" action="contact.php" method="post" enctype="multipart/form-data"> 
      <div class="row"> 
       <div> 
        <div class="form-group"> 
         <label for="name"> 
          Name</label> 
          <input type="text" class="form-control" id="name" name="name" placeholder="Enter name" required /> 

        </div> 
        <div class="form-group"> 
         <label for="email"> 
          Email Address</label> 
         <div class="input-group"> 
          <input type="email" class="form-control" id="email" name="email" placeholder="Enter email" required /></div> 
        </div> 
        <div class="form-group"> 
         <label for="subject"> 
          Subject</label> 
         <select id="subject" name="subject" class="form-control" required> 
          <option value="na" selected="careers">Choose One:</option> 
          <option value="careers">Careers</option> 
          <option value="general">General</option> 
         </select> 
        </div> 
        <div class="form-group"> 
         <label for ="attach"> 
          Attachments</label> 
         <input type="file" class="form-control" name="newupload[]" id="newupload" /> 
         <input type="file" class="form-control" name="newupload[]" id="newupload" /> 
         <input type="file" class="form-control" name="newupload[]" id="newupload" /> 
        </div> 
        </div> 
        <div class="form-group"> 
         <label for="name"> 
          Message</label> 
         <textarea name="message" id="message" class="form-control" rows="7" cols="20" required 
          placeholder="Message"></textarea> 
        </div> 


        <button type="submit" name="submit" id="btnContactUs"> 
         Send Message</button> 
      </div> 
      </form> 

PHP

<?php 

if($_POST && isset($_FILES['newupload'])) { 

$name=$_POST["name"]; 
$email=$_POST["email"]; 
$subject=$_POST["subject"]; 
$newupload=$_POST["newupload"]; 
$message=$_POST["message"]; 
$recipient_email = '[email protected]'; 

//get file details we need 
$file_tmp_name = $_FILES['newupload']['tmp_name']; 
$file_name  = $_FILES['newupload']['name']; 
$file_size  = $_FILES['newupload']['size']; 
$file_type  = $_FILES['newupload']['type']; 
$file_error  = $_FILES['newupload']['error']; 

$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL); 

//read from the uploaded file & base64_encode content for the mail 
$handle = fopen($file_tmp_name, "r"); 
$content = fread($handle, $file_size); 
fclose($handle); 
$encoded_content = chunk_split(base64_encode($content)); 


    $boundary = md5("sanwebe"); 
    //header 
    $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= "From: " .$email. "\n"; 
    $headers .= "Subject: " .$subject. "\n"; 
    $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

    //plain text 
    $body = "--$boundary\r\n"; 
    $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; 
    $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
    $body .= chunk_split(base64_encode('Name: ' .$name."\n". 
    'Email: ' .$email."\n". 
    'Subject: ' .$subject."\n". 
    'Message: ' .$message."\r\n")); 

    //attachment 
    $body .= "--$boundary\r\n"; 
    $body .="Content-Type: $file_type; name=\"$file_name\"\r\n"; 
    $body .="Content-Disposition: attachment; filename=\"$file_name\"\r\n"; 
    $body .="Content-Transfer-Encoding: base64\r\n"; 
    $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; 
    $body .= $encoded_content; 


$sentMail = @mail($recipient_email, $subject, $body, $headers); 


/* Redirect visitor to the thank you page */ 
header('Location: thanks.html'); 
exit(); 

} 

?> 

答えて

0

あなたはファイル

以上のループを必要とする私は)(uniqidのための添付ファイルIDを変更:

$body .= "X-Attachment-Id: " . uniqid('email_', true) . "\r\n\r\n"; 

は、これを試してみてください私はあなたを助けて欲しい:

<?php 

if ($_POST && isset($_FILES['newupload'])) { 

    $name = $_POST["name"]; 
    $email = $_POST["email"]; 
    $subject = $_POST["subject"]; 
    $message = $_POST["message"]; 
    $recipient_email = '[email protected]'; 

    $user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL); 

    $boundary = md5("sanwebe"); 
    //header 
    $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= "From: " . $email . "\n"; 
    $headers .= "Subject: " . $subject . "\n"; 
    $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

    //plain text 
    $body = "--$boundary\r\n"; 
    $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; 
    $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
    $body .= chunk_split(
     base64_encode(
      'Name: ' . $name . "\n" . 'Email: ' . $email . "\n" . 'Subject: ' . $subject . "\n" . 'Message: ' . $message 
      . "\r\n" 
     ) 
    ); 

    for ($i = 0; $i < 3; $i++) { 
     if (!empty($_FILES['newupload']['name'][$i])) { 
      //read from the uploaded file & base64_encode content for the mail 
      //get file details we need 
      $file_tmp_name = $_FILES['newupload']['tmp_name'][$i]; 
      $file_name = $_FILES['newupload']['name'][$i]; 
      $file_size = $_FILES['newupload']['size'][$i]; 
      $file_type = $_FILES['newupload']['type'][$i]; 
      $file_error = $_FILES['newupload']['error'][$i]; 

      $handle = fopen($file_tmp_name, "r"); 
      $content = fread($handle, $file_size); 
      fclose($handle); 
      $encoded_content = chunk_split(base64_encode($content)); 

      //attachment 
      $body .= "--$boundary\r\n"; 
      $body .= "Content-Type: $file_type; name=\"$file_name\"\r\n"; 
      $body .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n"; 
      $body .= "Content-Transfer-Encoding: base64\r\n"; 
      $body .= "X-Attachment-Id: " . uniqid('email_', true) . "\r\n\r\n"; 
      $body .= $encoded_content; 
     } 
    } 
+0

です。 –

+0

ありがとうMauricio!完璧に動作します! 10/10 – dmm503

+0

私の答えは正しいとマークしてください –

0

これは私が変更をしたあなたのアップロードしたファイル構造

Array 
(
    [newupload] => Array 
     (
      [name] => Array 
       (
        [0] => simple-hotstrings.ahk 
        [1] => 
        [2] => 
       ) 

      [type] => Array 
       (
        [0] => application/octet-stream 
        [1] => 
        [2] => 
       ) 

      [tmp_name] => Array 
       (
        [0] => T:\Temp\Php\php7A7B.tmp 
        [1] => 
        [2] => 
       ) 

      [error] => Array 
       (
        [0] => 0 
        [1] => 4 
        [2] => 4 
       ) 

      [size] => Array 
       (
        [0] => 4775 
        [1] => 0 
        [2] => 0 
       ) 

     ) 

) 
関連する問題