2017-01-19 46 views
1

これは私の最初のphpMailerの使用を試みたもので、添付ファイルを受け取っていません。他のすべては送信されますが、添付ファイルは送信されます。 uploadsディレクトリは、添付ファイルが存在するルートの直後にあります。私のPHPフォームに何か問題がありますか?添付ファイルが添付されていないphpMailer

<?php 

require('class.phpmailer.php'); 

//var_dump($_POST); 

//die; 

$subject = "Consignment Form"; 

$name = $_POST['name']; 

$email_address = $_POST['email']; 

$message = $_POST['message']; 

$phone = $_POST['phone']; 


$target_dir = "/uploads/"; 
$target_file = $target_dir . basename($_FILES["file_upload"]["name"]); 

// put your email 

$to = '[email protected]'; 


$email_subject = "Consignment form submitted by: $name"; 

// create email body and send it 

$email_body = "You have received a new message. \n\n". 

    "Here are the details:\n \nName: $name \n ". 

    "Email: $email_address\n \nPhone: $phone \n". 

    "Message: $message \n "; 


$email = new PHPMailer(); 
$email->From  = $email_address; 
$email->FromName = $name; 
$email->Subject = $email_subject; 
$email->Body  = $email_body; 
$email->AddAddress('[email protected]'); 
$email->AddAttachment($target_file); 

return $email->Send(); 

?> 

<form role="form" action="mail_consignment_new.php" class="contact-form validation-engine ajax-send"> 
    <div class="row"> 
     <div class="col-sm-4 form-group"> 
     <label class="sr-only" for="input_name">Name *</label> 
     <input type="text" name="name" class="form-control validate[required]" id="input_name" placeholder="Name *"> 
     </div> 
     <div class="col-sm-4 form-group"> 
     <label class="sr-only" for="input_email">Email *</label> 
     <input type="email" name="email" class="form-control validate[required,custom[email]]" id="input_email" placeholder="Email *"> 
     </div> 
     <div class="col-sm-4 form-group"> 
     <label class="sr-only" for="input_subject">Phone</label> 
     <input type="text" name="phone" class="form-control" id="input_phone" placeholder="Phone"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="sr-only" for="uploaded_file">Select A File To Upload:</label> 
     <input type="file" name="uploaded_file"> 
    </div> 

    <div class="form-group"> 
     <label class="sr-only" for="input_message">Message</label> 
     <textarea name="message" class="form-control validate[required]" rows="7" id="input_message" placeholder="Message"></textarea> 
    </div> 
    <div class="form-group"> 
     <button type="submit" class="btn btn-default btn-wide">Send</button> 
     <span class="loading-spinner" style="display:none;"></span> 
    </div> 
</form> 

答えて

0

特にthe basic contact form examplePHPMailerを備えた実施例にコードをベース。あなたは他の場所から廃止されたものを使用したようですが、基本的な間違いがたくさんあります。

決しては、送信元アドレスとしてユーザー指定のアドレスを使用します。それは偽造され、あなたがSPFの小切手に失敗するとメッセージが配信されなくなります。あなたのアドレスを送信元アドレスとして、送信者のアドレスを返信先アドレスにしてください。

あなたがアップロードしたファイルを扱う方法も間違っています - refer to the PHP manual。ユーザーの入力を再び信頼しているため、潜在的に脆弱です。 is_uploaded_fileまたはmove_uploaded_fileを使用してアップロードしたファイルをチェックする必要があります。send_file_uploadという例では、アップロードを安全に処理する方法が示されています。

$target_dir = "/uploads/"; 

これは相対パスではありません - /uploadsが本当に(そうです)、ファイルシステムのルートに存在しない限り、あなたのパスが間違っていることでしょう。それを相対パスで構成するか、どこから出発しているかを把握します。

$target_dir = "./uploads/"; 
$target_dir = __DIR__ . "/uploads/"; 

最後に、PHPMailerのメソッドは通常、成功した場合にtrueを返します。 addAttachmentへの呼び出しが成功したかどうかを確認します。

関連する問題