2016-04-08 4 views
0

Я пытаюсь отправить прикрепленный файл из контактной формы. Я основываю свой код, используя пример phpMailer, но при этом никакое вложение не отправляется. Не уверен, что я делаю неправильно. Имя прилагаемого ввода - clientResume.PHP Mailer отправляет пустое приложение

<div id='contactForm' class='animated'> 
    <div id='formClose'>X</div> 
    <form id="form" action="employerForm.php" method="post" enctype="multipart/form-data"> 
     <h1>Get Started For Free!</h1> 
     <label>Name</label> 
     <input class="formField" placeholder="Name" type="text" name="clientName" required> 
     <label>Email</label> 
     <input class="formField" placeholder="Email" type="email" name="clientEmail" required> 
     <label>Resume</label> 
     <input class="formField" placeholder="Resume" type="file" name="clientResume" required> 
     <input type="hidden" name="MAX_FILE_SIZE" value="30000"> 
     <input id='formButton' type='button' value='Submit'> 
    </form> 
</div> 

var name = $('input[name="clientName"]').val(), 
     email = $('input[name="clientEmail"]').val(), 
     company = $('input[name="clientCompany"]').val(), 
     comment = $('input[name="clientComment"]').val(), 
     resume = $('input[name="clientResume"]').val(), 
     form = $(document).find("form"), 
     formData = form.serialize(); 

$.ajax({ 
    type: 'POST', 
    url: form.attr('action'), 
    data: formData, 
    AccessControlAllowOrigin: '*'; 
}); 

<?php 

     require_once('phpmailer/PHPMailerAutoload.php'); 
     $mail = new PHPMailer(); 

     $name = $_POST['clientName']; 
     $email = $_POST['clientEmail']; 
     $attachment = tempnam(sys_get_temp_dir(), sha1($_FILES['clientResume']['tmp_name'])); 

     $subject = "Resume Submission [$name]"; 
     $message = "Name: $name " . "<br>Email: $email"; 

     $mail->isSMTP(); 
     $mail->Debugoutput = 'html'; 
     $mail->Host = 'correlation-host.correlation-one.com';  
     $mail->Port = 25; 
     $mail->SMTPSecure = 'tls'; 
     $mail->SMTPAuth = false; 
     $mail->setFrom($email, $name); 
     $mail->addAddress('[email protected]', 'Michael Paccione'); 
     $mail->Subject = 'PHPMailer SMTP test'; 
     $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['clientResume']['name'])); 
     if (move_uploaded_file($_FILES['clientResume']['tmp_name'], $uploadfile)) { 
      $mail->addAttachment($uploadfile, 'resume'); 
     } 
     $mail->msgHTML($message); 
     $mail->Send(); 
     $mail->SmtpClose(); 


    ?> 
+1

Что это за функция возврата tempnam()? – Gopalakrishnan

+0

Это из примера загрузки почтовой программы php на github. https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_file_upload.phps –

ответ

-1

Просто используйте этот тип прикрепить файл

$mail->AddAttachment($_FILES['clientResume']['tmp_name'], $_FILES['clientResume']['name']); 
+0

Это не работает. Фактически, в то время как прежде, чем это было, по крайней мере, прикрепление пустой привязки ... теперь нет прикрепленного сообщения. –

+0

$ mail-> Body = $ message; попробуйте отправить это вместо $ mail-> msgHTML ($ message); – Gopalakrishnan

+0

По-прежнему нет привязанности =/ –

0

Попробуйте это,

$ mail-> addAttachment ($ вложение);

Где $ вложение - это что-то вроде $ attachment = move_uploaded_file ($ _FILES ['clientResume'] ['tmp_name'], $ target);

+0

Извините, если я не понимаю, что будет $ target? –

+0

$ target - это путь к папке, в которой вы хотите сохранить файл. например. $ target = 'uploads /'.$_ FILES [' clientResume '] [' name ']; – Vimal

+0

О, я не хочу хранить файл ... Я просто хочу взять его из контактной формы на веб-сайте и сразу же отправить его по электронной почте. Нет серверного хранилища. –

1

Нет необходимости снова изобретать колесо; введите свой код на the file upload example provided with PHPMailer.

Вы не делаете move_uploaded_file, поэтому ваша загрузка небезопасна. Вы скопировали часть о создании безопасного имени файла, но не движение, следуя за ним, так что ваши addAttachment назовут ничего. Делают это так:

$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['clientResume']['name'])); 
if (move_uploaded_file($_FILES['clientResume']['tmp_name'], $uploadfile)) { 
    $mail->addAttachment($uploadfile, 'My uploaded file'); 
    ... 

Ваша форма отсутствует скрытый MAX_FILE_SIZE элемент до вашего входного элемента файла:

<input type="hidden" name="MAX_FILE_SIZE" value="30000"> 

Все это также покрыто the PHP docs on handling file uploads. Всегда полезно искать и читать исходные документы перед публикацией на SO.

+0

Это тоже не работает. Никакой файл не прикрепляется таким образом. –

+0

Похоже, что ошибка может быть в запросе ajax, поскольку, по-видимому, существуют особые требования к отправке файлов с AJAX. Я проверю, когда я посмотрю глубже. –

+0

Сбросьте содержимое $ _POST в файл журнала и/или используйте веб-инспектор, чтобы вы могли быть уверены, что отправляет ваш запрос. – Synchro

0

Необходим для доступа к API FormData js для правильной отправки вложения с лицевой стороны.

  var fd = new FormData(); 
      fd.append("clientName", name); 
      fd.append("clientEmail", email); 
      fd.append("clientResume", $(document).find('input[name="clientResume"]')[0].files[0]); 

      $.ajax({ 
       type: 'POST', 
       url: form.attr('action'), 
       processData: false, 
       contentType: false, 
       data: fd, 
       datatype: 'json' 
      }) 
Смежные вопросы