Здравствуйте!
Есть ajax форма отправки письма с вложением на почту с сайта:
HTML
<form id="form-file" class="form" method="post" enctype="multipart/form-data" data-form-validate="false">
<div class="form__row">
<div class="form__input-wrap">
<input id="fname" class="form__input" type="text" name="name" id="form_name">
<label class="form__label" for="name">Ваше имя</label>
</div>
<div class="form__input-wrap">
<input id="email_address" class="form__input" type="text" name="email" id="form_contacts">
<label class="form__label" for="email">Ваша эл. почта</label>
</div>
<div class="form__input-wrap">
<input class="form__input user-phone" type="text" name="phone" id="form_phone">
<label class="form__label" for="phone">Ваша телефон</label>
</div>
<div class="form__input-wrap">
<input class="form__input form__textarea" type="text" name="message" id="form_comment">
<label class="form__label" for="message">Пару слов о проекте</label>
</div>
<div class="form__input-wrap form-file">
<label class="file-label icon">
<i class="icon-clip"></i>
<span class="title-file">Прикрепить бриф или ТЗ (doc, docx, pdf)</span>
<input class="FileUpload1" id="attachment" name="attachment" type="file" accept=".pdf,.doc,.docx"/>
</label>
</div>
<button class="form__submit" type="button" id="submit" value="Отправить">Отправить</button>
</div>
</form>
ajax
$("#submit").on('click', function() {
var proceed = true;
if(proceed) {
var m_data = new FormData();
m_data.append( 'first_name', $('#fname').val());
m_data.append( 'email_address', $('#email_address').val());
m_data.append( 'file_attach', $('input[name=attachment]')[0].files[0]);
$.ajax({
url: '../integration.php',
data: m_data,
processData: false,
contentType: false,
type: 'POST',
dataType:'json',
success: function(response){
if(response.type == 'error'){
output = '<div class="error">'+response.text+'</div>';
}else{
output = '<div class="success">'+response.text+'</div>';
}
$("#response").hide().html(output).slideDown(); }
});
}
});
PHP
<?php
$to_email = "mail@mail.ru";
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
$output = json_encode(array(
'type'=>'error',
'text' => 'Sorry Request must be Ajax POST'
));
die($output);
$first_name = filter_var($_POST["first_name"], FILTER_SANITIZE_STRING);
$email_address = filter_var($_POST["email_address"], FILTER_SANITIZE_EMAIL);
$subject = "Your Email Subject Goes Here...";
if(strlen($first_name)<4){
$output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'));
die($output);
}
$message = '<html><body>';
$message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>First Name:</strong> </td><td>" . strip_tags($_POST['first_name']) . "</td></tr>";
$message .= "<tr><td><strong>Email Address :</strong> </td><td>" . strip_tags($_POST['email_address']) . "</td></tr>";
$message .= "</table>";
$message .= "</body></html>";
$file_attached = false;
if(isset($_FILES['file_attach']))
{
$file_tmp_name = $_FILES['file_attach']['tmp_name'];
$file_name = $_FILES['file_attach']['name'];
$file_size = $_FILES['file_attach']['size'];
$file_type = $_FILES['file_attach']['type'];
$file_error = $_FILES['file_attach']['error'];
if($file_error>0)
{
$mymsg = array(
1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",
2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
3=>"The uploaded file was only partially uploaded",
4=>"No file was uploaded",
6=>"Missing a temporary folder" );
$output = json_encode(array('type'=>'error', 'text' => $mymsg[$file_error]));
die($output);
}
$handle = fopen($file_tmp_name, "r");
$content = fread($handle, $file_size);
fclose($handle);
$encoded_content = chunk_split(base64_encode($content));
$file_attached = true;
}
if($file_attached) //continue if we have the file
{
// a random hash will be necessary to send mixed content
$separator = md5(time());
// carriage return type (RFC)
$eol = "\r\n";
// main header (multipart mandatory)
$headers = "From:Fromname <info@fromemail.com>" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol;
// message
$body .= "--" . $separator . $eol;
$body .= "Content-type:text/html; charset=utf-8\n";
$body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$body .= $message . $eol;
// attachment
$body .= "--" . $separator . $eol;
$body .= "Content-Type:".$file_type." ";
$body .= "Content-Type: application/octet-stream; name=\"" . $file_name . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachment; filename=\"".$file_name."\"". $eol;
$body .= $encoded_content . $eol;
$body .= "--" . $separator . "--";
}
else
{
$eol = "\r\n";
$headers = "From: Fromname <info@fromemail.com>" . $eol;
$headers .= "Reply-To: ". strip_tags($email_address) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$body .= $message . $eol;
}
$send_mail = mail($to_email, $subject, $body, $headers);
if(!$send_mail)
{
//If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
}else{
$output = json_encode(array('type'=>'message', 'text' => 'Hi '.$first_name .' Thank you for your order, will get back to you shortly'));
die($output);
}
?>
Письма приходят, но файлы doc пустые. В чем может быть причина?