Показать сообщение отдельно
  #1 (permalink)  
Старый 09.10.2017, 10:37
Новичок на форуме
Отправить личное сообщение для KateU Посмотреть профиль Найти все сообщения от KateU
 
Регистрация: 09.10.2017
Сообщений: 8

Отправка письма с вложением через formData
Здравствуйте.
Помогите, пожалуйста, с отправкой письма с вложением. Пытаюсь сделать через formData. Сама отправка срабатывает нормально, все отправляется, письмо доходит. Но вместо того, чтобы после нажатия на кнопку "отправить" появлялось сообщение об успешной отправке, страница перезагружается.
Вот код:
Форма отправки:
<form action method="post" name="calcprojectform1" id="calcprojectform1" enctype='multipart/form-data'>
                            <input class="pole validate[required]" data-prompt-position="Left:-65,35" name="name" type="text" placeholder="Имя" /><br><br>
                            <input class="pole validate[required]" data-prompt-position="Left:-65,35" name="phone" type="text" placeholder="Телефон" /><br><br>
                            <input class="pole validate[required,custom[email]]" data-prompt-position="Left:-65,35" name="mail" type="text" placeholder="Ваш e-mail" /><br><br>
                            <input class="pole" type='file' name='mail_file' data-prompt-position="Left:-65,35"/><br><br>
                            <input class="mainButton_form" name="calc-project-submit1" id="calc-project-submit1" type="submit" value="получить">
                        </form>


Скрипт обработки
$(document).on('click', 'input[name="calc-project-submit1"]', function () {
    if ($('form[name="calcprojectform1"]').validationEngine('validate'))
    {
var form = document.forms.namedItem("calcprojectform1");
        var formData = new FormData(form);
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "mail.php");

        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    data = xhr.responseText;
                    if (data == '1') {
                        $("#calcprojectform1").reset();
                        $("#calcprojectform1").replaceWith('<div style="padding:15px;background:#fff; font-size:14px;font-family:MuseoSansCyrl_700; color:green;">Спасибо, ваша заявка успешно отправлена.</div>');
style="padding:15px;background:#fff; font-size:14px;font-family:MuseoSansCyrl_700; color:green;">Спасибо, ваша заявка успешно отправлена.</div>')
                    } else {
                        $('#calc-project-submit1').validationEngine('showPrompt', 'Ошибка отправки данных. Попробуйте позже.');
                    }
                }
            }
        };
        xhr.send(formData);
    }
});


Файл отправки php
<?php

$mailto = "test@yandex.ru";
$charset = "utf-8";
$subject = "Заполнили форму Рассчитать проект";
$content = "text/html";
$status = "<br>";
if (!empty($_POST)) {
    $name = htmlspecialchars(stripslashes($_POST['name']));
    $email = htmlspecialchars(stripslashes($_POST['mail']));
    $phone = htmlspecialchars(stripslashes($_POST['phone']));
    $picture = "";
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "From: \"" . $name . "\" <test@yandex.ru>\r\n";
    $headers .= "Bcc: test@yandex.ru\r\n";
    $headers .= "X-Mailer: E-mail from my site \r\n";
    $sendmessage = "<html><body>
<p><b>Имя:</b> " . $name . "</p>
<p><b>Телефон:</b> " . $phone . "</p>
<p><b>E-mail:</b> " . $email . "</p>
</body></html>";

    if (!empty($_FILES['mail_file']['tmp_name'])) {
        $path = $_FILES['mail_file']['tmp_name'];
        $picture = $_FILES['mail_file']['name'];
    }
    $boundary = "--" . md5(uniqid(time()));
    $headers .="Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\n";
    $multipart .= "--" . $boundary . "\n";
    $multipart .= "Content-Type: text/html; charset=$charset\n";
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    $multipart .= "$sendmessage\n\n";

    $message_part = '';
    $fp = fopen($path, "r");
    if (!$fp) {
        print "Файл " . $path . " не может быть прочитан";
        exit();
    }
    $file = fread($fp, filesize($path));
    fclose($fp);
    $message_part .= "--" . $boundary . "\n";
    $message_part .= "Content-Type: application/octet-stream\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"" . $picture . "\"\n\n";
    $message_part .= chunk_split(base64_encode($file)) . "\n";

    $multipart .= $message_part . "--" . $boundary . "--\n";
    
    if (mail($mailto, $subject, $multipart, $headers)) {
       echo '1'; 
    } else {
        echo '2';
    }
}
?>
Ответить с цитированием