2017-08-29 13 views
-1

フォームに記入すると、ユーザーが添付ファイルを送信できるようにしようとしています。添付ファイルをPHPフォーム経由でメールに送信するにはどうすればよいですか?

私はメールを送信できますが添付ファイルは送信されません。

これはHTML

<form method="post" enctype="multipart/form-data"> 
      <div class="form-group"> 
       <label for="name">Name</label> 
       <input type="text" class="form-control" id="name" placeholder="Your name" name="name"> 
      </div> 

      <div class="form-group"> 
       <label for="email">Email address</label> 
       <input type="email" class="form-control" id="email" placeholder="Please enter your email" name="email"> 
      </div> 

      <div class="form-group"> 
       <textarea class="form-control" id="text" placeholder="What would you like to tell us" rows="3" name="text"></textarea> 

       <div class="form-group"> 
       <label for="file"></label> 
       <input type="file" class="form-control-file" id="file" name="attachment" onchange="return ValidateFileUpload()"> 
       </div> 
      </div> 

      <button type="submit" id="submit" class="btn btn-primary">Submit</button> 
      </form> 

これは、PHPコードです:

<?php 

$error = ""; $successMessage = ""; 

if ($_POST) { 

    if (!$_POST["email"]) { 

     $error .= "An email address is required.<br>"; 

    } 

    if (!$_POST["name"]) { 

     $error .= "Your name is required.<br>"; 

    } 


    if ($_POST['email'] && filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) === false) { 

     $error .= "The email address is invalid.<br>"; 

    } 

    if ($error != "") { 

     $error = '<div class="alert alert-danger" role="alert"><p>There were error(s) in your form:</p>' . $error . '</div>'; 

    } else { 

     $emailTo = "@gmail.com"; 

     $subject = $_POST['name']; 

     $content = $_POST['text']; 

     $file = $_POST['file']; 

     $headers = "From: ".$_POST['email']; 

     if (mail($emailTo, $subject, $content, $headers)) { 

      $successMessage = '<div class="alert alert-success" role="alert">Your message was sent, we\'ll get back to you ASAP!</div>'; 


     } else { 

      $error = '<div class="alert alert-danger" role="alert"><p><strong>Your message couldn\'t be sent - please try again later</div>'; 


     } 

    } 

} 

?> 
+3

この質問は非常に頻繁に来ます。アドバイスは、常にphp 'mail()'を使わず、APIを使って良いライブラリやメールサービスを使うことです。たとえば、https://github.com/PHPMailer/PHPMailerまたはhttps://postmarkapp.com –

+3

SwiftMailやPHPMailerなどのメールライブラリを使用することをお勧めします。単純なテキストを送信する以外のことをする場合は郵便物。それはあなたに頭痛の多くを保存します。また、実際のSMTP経由でメールを送信することも非常に簡単で、メールのバウンス/間違ってスパムとしてタグ付けされるリスクを軽減します。 –

+0

_注:_質問を書くときは、同じテキストを何度も貼り付けないようにしてください。私はあなたのために質問をきれいにした。 –

答えて

0
function mail_attachment($to, $subject, $message, $from, $file) { 
    // $file should include path and filename 
    $filename = basename($file); 
    $file_size = filesize($file); 
    $content = chunk_split(base64_encode(file_get_contents($file))); 
    $uid = md5(uniqid(time())); 
    $from = str_replace(array("\r", "\n"), '', $from); // to prevent email injection 
    $header = "From: ".$from."\r\n" 
      ."MIME-Version: 1.0\r\n" 
      ."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n" 
      ."This is a multi-part message in MIME format.\r\n" 
      ."--".$uid."\r\n" 
      ."Content-type:text/plain; charset=iso-8859-1\r\n" 
      ."Content-Transfer-Encoding: 7bit\r\n\r\n" 
      .$message."\r\n\r\n" 
      ."--".$uid."\r\n" 
      ."Content-Type: application/octet-stream; name=\"".$filename."\"\r\n" 
      ."Content-Transfer-Encoding: base64\r\n" 
      ."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n" 
      .$content."\r\n\r\n" 
      ."--".$uid."--"; 
    return mail($to, $subject, "", $header); 
    } 
+0

良い答えは_explanation_を含んでいて、単なるコードだけではありません。まともな字下げやコードの書式設定も傷つきます。 –

関連する問題