• Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, Спасибо Вам большое! Прям вот от души благодарю)
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, у меня получилось отправить картинку!!!! Да, это был тупой способ подбора рабочего кода, но все-таки)) Правда получилось с некоторой особенностью: сначала приходит письмо без картинки, потом с картинкой)) Но мне это не мешает, я так рада!!!
    Вот с помощью этой чудо-комбинациии все получилсь:
    <form enctype="multipart/form-data" method="post" id="feedback-form">
                <label for="nameFF">Имя:</label>
                <input type="text" name="nameFF" id="nameFF" required placeholder="например, Иван Иванович Иванов" x-autocompletetype="name" class="w100 border">
                <label for="contactFF">Email:</label>
                <input type="email" name="contactFF" id="contactFF" required placeholder="например, ivan@yandex.ru" x-autocompletetype="email" class="w100 border">
                <label for="fileFF">Прикрепить файл:</label>
                <input type="file" name="fileFF[]" multiple id="fileFF" class="w100">
                <label for="messageFF">Сообщение:</label>
                <textarea name="messageFF" id="messageFF" required rows="5" placeholder="Детали заявки…" class="w100 border"></textarea>
                <br>
                <input value="Отправить" type="submit" id="submitFF">
                </form>


    document.getElementById('feedback-form').addEventListener('submit', function(evt){
      var http = new XMLHttpRequest(), f = this;
      evt.preventDefault();
      http.open("POST", "mail.php", true);
      http.onreadystatechange = function() {
        if (http.readyState == 4 && http.status == 200) {
          alert(http.responseText);
          if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поле сообщения, если в ответе первым словом будет имя отправителя
            f.messageFF.removeAttribute('value');
            f.messageFF.value='';
          }
        }
      }
      http.onerror = function() {
        alert('Извините, данные не были переданы');
      }
      http.send(new FormData(f));
    }, false);


    <?php
    if (isset ($_POST['contactFF'])) {
      $to = "info@antik88.ru"; // поменять на свой электронный адрес
      $from = $_POST['contactFF'];
      $subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER'];
      $message = "Имя: ".$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF'];
      $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";
      for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
         if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
             $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
             $filename = $_FILES['fileFF']['name'][$i];
             $filetype = $_FILES['fileFF']['type'][$i];
             $filesize += $_FILES['fileFF']['size'][$i];
             $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 mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Дмитрий, Спасибо, буду разбираться, но все дело в моей тупости, я даже не сделала папку на сервере для загрузки файлов, потому что не знала, что она нужна... кошмар)
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, я поняла, в чем тут дело! Нужна же папка на сервере! Вроде облачного хранилища, куда будут поступать загруженные с формы файлы! Я создала папку download, ввела данные FTP-аккаунта в php файл, но у меня вопрос: как теперь соединить этот код для файлов и код для отправки имени и телефона? Я же не могу просто взять 2 разных кода и засунуть в один файл. Уже пробовала, не работает, конечно. Вот код для изображений. отдельно он тоже не работает, в нем же не почтового адреса , а я не знаю, куда его вставить:
    <?php
    
    function upload($filename)
    {
    
    $login="ваш_логин";
    $pass="ваш_пароль";
    $host="имя_фтп";
    $path="путь_к_папке";
    
    $tmp = $_FILES[$filename]['tmp_name'];
    $aname = $_FILES[$filename]['name'];
    
    $connect = ftp_connect($host);
    if(!$connect) exit();
    $result = ftp_login($connect, $login, $pass);
    if ($result==false) exit();
    if (ftp_chdir($connect, $path)) ftp_put($connect, $aname, $tmp, FTP_BINARY);
    else exit();
    ftp_quit($connect);
    unlink($tmp);
    
    };
    
    if (isset($filename)) upload('filename')
    
    ?>
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Дмитрий, форма для отправки файла, я ее вот тут нашла: https://webref.ru/html/form/enctype
    вроде с ней должно быть все в порядке..
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, к сожалению, приходит только информация с заполненных полей (имя, телефон, емейл и вопрос из textarea. Но вот на файл и намека нет, совсем ничего. Может быть, я что-то не указала в php mail. Буду искать инструкцию на русском к нему, может что-то надо дописать. Или вчитываться в каждую строчку кода. Или бросить это дело совсем) Мне самой уже противно задавать вопросы из серии "как крутить педали на велосипеде, очень хочу кататься")
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, спасибо, большое, я буду стараться понять, были они загружены на сервер...
    Хотя мне уже проще принять решение исключить форму совсем)
    Благодарю Вас и хорошего Вам дня :)
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    ThunderCat, даже с одним файлом ничего не приходит. Как же мне понять, что происходит?
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Дмитрий, Да, это хостинг Beget, файл весит 100 кб)
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, во-первых я безумно благодарна Вам, что Вы мне помогаете, Ваши ответы для меня бесценны.
    Зачем форма? Есть ссылки на вотсап и телеграмм, но мне кажется, что нужно ориентироваться и на людей, которым удобна форма заявки на сайте. Это сбор контактных данных. К тому же у всех абсолютно всех конкурентов она есть. Наличие формы говорит о том, что сайтом занимались не на коленке, это не просто ссылка на ватсап, как будто мошенники сляпали за 2 минуты, а серьезный сайт.
    Зачем файлы? это не дамский каприз. Мне нужно, чтобы клиенты присылали на оценку подробные фото антиквариата. Там не обойдешься одной фотографией, нужно несколько. Вдруг кто-то не пользуется телеграммом и ватсапом?
    Я не отправила полный код, потому что по количеству символов он сюда не помещается. Идея закинуть его с сторонний сервис типа CodePen посетила меня только сейчас)) Мне очень стыдно за свою тупость, но я должна осилить этот сайт. Я понимаю, что залезла в то, что мне совершенно не по силам. Но все же рассчитываю закончить сайт.
    Последний раз попробую победить эту форму с файлами, и ,если ничего не выйдет, буду создавать образ прогрессивных сайтоделов) без формы))
    Я убрала копированные input и отправила 1 файл весом 100 кб, формата jpg, и ничего не пришло.
    Подскажите, пожалуйста, как понять, в чем тут ошибка?
    https://codepen.io/qggsxsip-the-selector/pen/gOZaOdv
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, у меня просто не получается эта "отладка", в исходном коде я ничего не нашла, и решила, что просто не хватает кода, который отвечает за вложения...
    Спасибо Вам огромное, я попробую разобраться с php мейлером, хотя и инструкция на английском не готовит мне ничего хорошего... Я находила его на git и просто не рискнула взяться за него именно из-за отсутствия объяснения на русском, боюсь нахеровертить чего-то страшного и все испортить. Но, если Вы говорите, что это действительно хорошее решение, я попробую.
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, сегодня пыталась понять, какая же часть кода отвечает за отправку вложений. в итоге решила добавить
    $file = "act.jpg";
    Мне показалось логичным это, и я добавила еще
    $fileRead = fopen($file, "r"); // открываем файл
            $contentFile = fread($fileRead, filesize($file)); // считываем его до конца
            fclose($fileRead); // закрываем файл
            $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n"; 
            $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";
            $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл
            $bodyMail .= "--".$separator ."--\n";

    Письма приходят по прежнему без загруженных изображений. Возможно, это совсем не то, что нужно и без jquery тут не обойтись? Или все-таки можно найти походящий код? Если спросить проще, насколько я близка к решению проблемы отправки файлов вот с этим кодом?
    <?php
    var_dump($_POST);
    $method = $_SERVER['REQUEST_METHOD'];
    $admin_email  = "info@antik88.ru";
    $file = "act.jpg"; // файл
    //Script Foreach
    $c = true;
    if ( $method === 'POST' ) {
    
    	$form_subject = trim($_POST["form_subject"]);
    
    	foreach ( $_POST as $key => $value ) {
    		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
    			$message .= "
    			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
    				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
    				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
    			</tr>
    			";
    		}
    	}
    } else if ( $method === 'GET' ) {
    
    	$project_name = trim($_GET["project_name"]);
    	$admin_email  = trim($_GET["admin_email"]);
    	$form_subject = trim($_GET["form_subject"]);
    	 $fileRead = fopen($file, "r"); // открываем файл
            $contentFile = fread($fileRead, filesize($file)); // считываем его до конца
            fclose($fileRead); // закрываем файл
            $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n"; 
            $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";
            $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл
            $bodyMail .= "--".$separator ."--\n";
    
    	foreach ( $_GET as $key => $value ) {
    		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
    			$message .= "
    			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
    				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
    				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
    			</tr>
    			";
    		}
    	}
    }
    
    $message = "<table style='width: 100%;'>$message</table>";
    
    function adopt($text) {
    	return '=?UTF-8?B?'.Base64_encode($text).'?=';
    }
    
    $headers = "MIME-Version: 1.0" . PHP_EOL .
    "Content-Type: text/html; charset=utf-8" . PHP_EOL .
    'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
    'Reply-To: '.$admin_email.'' . PHP_EOL;
    
    mail($admin_email, adopt($form_subject), $message, $headers );

    И еще такой вопрос. Этот емейл info@antik88.ru никто не должен видеть? нельзя размещать его на сайте в контактной информации? или все-таки можно?
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, Спасибо большое, что делитесь профессиональными знаниями) буду учиться)
    Хорошего Вам дня!)
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    AUser0, Вот прям даже не знаю, как Вас благодарить) Все работает, как надо))
    Осталось только сделать, чтобы файлы тоже отправлялись, но, думаю, экспериментальным путем исправлю это.
    Спасибо огромное Вам!)))
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    AUser0, спасибо большое, буду разбираться. Тут проще, похоже вообще все убрать и заменить на другой код. Подскажите, пожалуйста, где мне взять шаблон post для отправки писем с формы? Может быть, есть готовые решения? Те, которые я пробовала, не работают. Согласна, это наглость, требовать готовых "рецептов", но выхода у меня нет: сайт, мне кажется, должен иметь форму, иначе он не выглядит серьезно)
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    AUser0, ой, хорошо, что Вы сказали, я даже не подумала над этим. А как это сделать, если не секрет? Искать готовое решение или можно исправить этот код?
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    AUser0, Спасибо большое! я, кажется, решила проблему! Вроде так должно быть? Благодарю Вас от всей души!
    64e598dae9691606505927.png
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    AUser0, Спасибо большое! я решила ради эксперимента посмотреть, что будет если ответить на письмо с формы. Получилась странная вещь, в поле "кому" указан емейл админки, хотя должен быть указан емейл, с которого пришло письмо, чтобы ответное письмо пришло человеку на почту. В чем тут может быть дело ?
    Еще я добавила project_name в инпут и отобразилось имя, которое вводит человек.
    <input name="project_name" id="name" class="form_input" type="text" placeholder="Ваше имя*">

    но вот с textarea это не работает, если подставить name="project_name" в textarea, то текст сообщения выводится в месте, где должно быть имя человека, то есть вместо "письмо от Иван Иваныча" мы видим "оцените мой предмет", например. А поле для вывода самого текста сообщения так и остается пустым .64e58ebf0be40835661256.jpeg
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    Anna_Polyakovich
    @Anna_Polyakovich Автор вопроса
    Ипатьев, спасибо большое Вам за совет. Было бы справедливо хорошенько на меня разозлиться. Вывести результат var_dump($_POST); нужно в какой части файла php? Не ругайте за тупость очень сильно, пожалуйста) код я подобрала в уроке и попыталась совместить его с html, я совершенно ничего не понимаю в php, позор мне