Здравствуйте! Сразу скажу, что phpи js для меня темный лес. знаю только html и то на уровне новичка. Нашла форму, не украла)) и попыталась установить. письма приходят на почту, но пустые, только адрес отправителя и адрес страницы, с которой форма отправлена. Есть подозрение, что какие-то данные не заполнены. Может кто поможет? HTML: <div id="mail"> <div class="box"> <form id="ajax-contact-form" enctype="multipart/form-data" method="post"> <div class="form-group"> <label for="nameFF">Имя:</label> <input id="nameFF" name="nameFF" autocomplete="name" type="text" required> </div> <div class="form-group"> <label for="contactFF">E-mail:</label> <input id="contactFF" name="contactFF" autocomplete="email" type="email" required> </div> <div class="form-group"> <label for="telFF">Телефон:</label> <input id="telFF" name="telFF" type="tel" autocomplete="tel" required> </div> <div class="form-group"> <label for="projectFF">Сообщение</label> <textarea id="projectFF" name="projectFF" cols="40" rows="3"></textarea> </div> <div class="control-file"> <label for="fileFF">Прикрепить файл:</label> <input id="fileFF" name="fileFF" type="file"> </div> <button class="btn" type="submit" id="submitFF">Отправить сообщение</button> </form> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="js/script.js"></script> </div> </div> PHP: <?php if (isset ($_POST['contactFF'])) { $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER']; $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; $message=" Content-Type: multipart/mixed; boundary=\"$boundary\" --$boundary Content-Type: text/plain; charset=\"utf-8\" Content-Transfer-Encoding: 7bit $message"; if(is_uploaded_file($_FILES['fileFF']['tmp_name'])) { $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name']))); $filename = $_FILES['fileFF']['name']; $filetype = $_FILES['fileFF']['type']; $filesize = $_FILES['fileFF']['size']; $message.=" --$boundary Content-Type: \"$filetype\"; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=\"$filename\" $attachment"; } $message.=" --$boundary--"; if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ mail($to, $subject, $message, $headers); echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!'; } else { echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; } } ?> корректно приходит только "Заполнена контактная форма на сайте ", и Адрес сайта. Чувствую что-то в php не заполнено. Код (Javascript): $(function() { document.getElementById('ajax-contact-form').addEventListener('submit', function(evt){ var http = new XMLHttpRequest(), f = this; var th = $(this); evt.preventDefault(); http.open("POST", "contact.php", true); http.onreadystatechange = function() { if (http.readyState == 4 && http.status == 200) { alert(http.responseText); if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поля формы, если в ответе первым словом будет имя отправителя (nameFF) th.trigger("reset"); } } } http.onerror = function() { alert('Ошибка, попробуйте еще раз'); } http.send(new FormData(f)); }, false); }); Буду признательна за помощь! никак не могу себе сайт сделать по-человечески)
@Надин исправьте contact.php и увидите что все отправляеться, в скриптах ошибок нет. PHP: <?php if (isset ($_POST['contactFF'])) { $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER']; $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; $message=" Content-Type: multipart/mixed; boundary=\"$boundary\" --$boundary Content-Type: text/plain; charset=\"utf-8\" Content-Transfer-Encoding: 7bit $message"; if(is_uploaded_file($_FILES['fileFF']['tmp_name'])) { $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name']))); $filename = $_FILES['fileFF']['name']; $filetype = $_FILES['fileFF']['type']; $filesize = $_FILES['fileFF']['size']; $message.=" --$boundary Content-Type: \"$filetype\"; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=\"$filename\" $attachment"; } $message.=" --$boundary--"; echo $message; // if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ // mail($to, $subject, $message, $headers); // echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!'; // } else { // echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; // } } ?>
спасибо за ответ.. не пойму на что исправить ? --- Добавлено --- у меня на почту приходит пустое письмо с адресом и местом отправления, а остльные заполненные данные не доходят.. дело в имени файла?
@Надин попробуйте исправить contact.php так, и посмотрите что на почту придет. Но фаил не выбирайте, это просто для теста: PHP: <?php if (isset ($_POST['contactFF'])) { $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER']; $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; if ($filesize < 10000000) { mail($to, $subject, $message, $headers); echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!'; } else { echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; } } до скобку забыл, добавил
вот это PHP: <?php if (isset ($_POST['contactFF'])) { $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER']; $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; $message=" Content-Type: multipart/mixed; boundary=\"$boundary\" --$boundary Content-Type: text/plain; charset=\"utf-8\" Content-Transfer-Encoding: 7bit $message"; if(is_uploaded_file($_FILES['fileFF']['tmp_name'])) { $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name']))); $filename = $_FILES['fileFF']['name']; $filetype = $_FILES['fileFF']['type']; $filesize = $_FILES['fileFF']['size']; $message.=" --$boundary Content-Type: \"$filetype\"; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=\"$filename\" $attachment"; } $message.=" --$boundary--"; if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ mail($to, $subject, $message, $headers); echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!'; } else { echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; } } ?> на вот это PHP: <?php if (isset ($_POST['contactFF'])) { $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER']; $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; if ($filesize < 10000000) { mail($to, $subject, $message, $headers); echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!'; } else { echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; } } ?> и отослать на почту и посмотреть что придет, но без файла
Советую ознакомиться с форматом письма с вложением, например из моей статьи Как сделать отправку письма с вложением? --- Добавлено --- И utf-8 с 7bit, мягко говоря, плохо сочетается. Используйте 8bit и надейтесь, что вся цепочка вплоть до получателя это поддерживает.
а так если просто: PHP: <?php $to = 'nadin@mail.ru'; $subject = 'the subject'; $message="Имя пользователя: ".$_POST['nameFF'] $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?>
PHP: $to = "nadin@mail.ru"; $from = "nadinadin@mail.ru"; Странно, что Маша вообще вам что-то доставляет с таким-то отношением к делу. Или для примера написали эти адреса?
у вас тоже все там заполнено PHP: $from = "nadinadin@mail.ru"; $headers .= "From: " . $from . "\r\n"; $headers .= "Reply-To: " . $from . "\r\n"; --- Добавлено --- Не в этом дело, надо сначала добиться чтобы хоть что то на почту приходило, без форм и прочего. И от этого плясать. Вот ссылка на функцию отправки письма https://www.php.net/manual/ru/function.mail.php
@Artur_hopf, ТС вроде пишет, что письмо приходит, но пустое @Надин, бюджет предполагается на это дело или ожидаете халявное решение? --- Добавлено --- Ну, например из-за ошибки в формате, о чем я написал в моем первом посте
@miketomlin если у нее так не приходит, то причем тут формат?: PHP: <?php $to = 'nadin@mail.ru'; $subject = 'the subject'; $message="Имя пользователя: ".$_POST['nameFF'] $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?>
какой бюджет, если я сама себе сайт делаю?) да и здесь вроде особо писать ничего уже не нужно - все есть, просто что-то не так.. отправляет, но строки с телефоном и сообщением приходят пустыми.я прикрепила фотку
ОК, успехов Если сами делаете, что мешало пройти по оставленной мной ссылке и ознакомиться с форматом? --- Добавлено --- P.S. Можно не отвечать. Это скорее риторический вопрос. Еще раз успехов.