2017-01-19 3 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

자료 코드는 PHPMailer, 특히 the basic contact form example 제공. 당신이 다른 곳에서 사용되지 않는 것을 사용한 것처럼 보입니다. 그리고 많은 기본적인 실수가 있습니다.

아니요은 보낸 사람 주소로 사용자 제공 주소를 사용하십시오. 그것은 위조되어 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에 대한 호출이 성공했는지 여부.