Доброго времени суток! Есть код PHP: <?php include('kcaptcha/kcaptcha.php'); session_start(); require_once("config.php"); function add_attachment($message, $name = "", $ctype = "application/octet-stream") { $this->parts[] = array( "ctype" => $ctype, "message" => $message, "encode" => $encode, "name" => $name ); } if ($_POST['act'] == "y") { if (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']) { if (isset($_POST['posName']) && $_POST['posName'] == "") { $statusError = "$errors_name"; } elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "") { $statusError = "$errors_mailfrom"; } elseif (isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail'])) { $statusError = "$errors_incorrect"; unset($_POST['posEmail']); } elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "") { $statusError = "$errors_subject"; } elseif (isset($_POST['posText']) && $_POST['posText'] == "") { $statusError = "$errors_message"; } elseif (!empty($_POST)) { //заголовок для нас $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: $content charset=$charset\r\n"; $headers .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n"; $headers .= "From: \"Заказ с сайта " . $_POST['posName'] . "\" <" . $_POST['posEmail'] . ">\r\n"; $headers .= "X-Mailer: My Send E-mail\r\n"; //заголовок для заказчика $headerszakaz = "MIME-Version: 1.0\r\n"; $headerszakaz .= "Content-Type: $content charset=$charset\r\n"; $headerszakaz .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n"; $headerszakaz .= "From: \"Жилой комплекс: все планировки с ценами\" <" . $mailto . ">\r\n"; $headerszakaz .= "X-Mailer: My Send E-mail\r\n"; mail("$mailto", "$subject", "Посетитель сайта скачал файл: $message", "$headers"); //отправляем сообщение нам mail($_POST['posEmail'], "$subject", "Спасибо, что интересуетесь!: $message", "$headerszakaz"); //отправляем сообщение заказчику unset($name, $posText, $mailto, $subject, $posRegard, $message); $statusSuccess = "$send"; } } else { $statusError = "$captcha_error"; unset($_SESSION['captcha_keystring']); } } ?> Работает он отлично, но нужно прикрепить один и тот же файл при отправке письма каждому клиенту (обычный pdf) в $headerszakaz Когда пытаюсь добавить аттач он выдает ошибку, что не находит заявленную функцию, а если пытаюсь добавить "нормально" с указанием типа контента и разделителями, код просто не выполняется. Вероятно, решение довольно простое, но у меня что-то не получается, буду благодарен за помощь.
Тут дело в том что нужно почтовый стандарт соблюдать. Проще воспользоваться PHPMailer или Swift чтобы отправить письмо, они всё за тебя сделают. https://github.com/PHPMailer/PHPMailer тут на главной есть примеры и папка examples с примерами, скачать через composer или download -> download zip пример с прикреплением файла https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_file_upload.phps
Спасибо за ссылку! Просто у меня немного иные задачи: файл уже загружен и должен быть просто прикреплен к тому, что и так отправляется, а он этого не хочет (и, судя по всему, не может). PHP: function add_attachment($message, $name = "", $ctype = "application/octet-stream") { $this->parts[] = array( "ctype" => $ctype, "message" => $message, "encode" => $encode, "name" => $name ); } Этот кусок, вероятно, совсем лишний. Можно ли как-то изменить код под нужный не сильно всё переделывая? --- Добавлено --- Например: PHP: //заголовок для заказчика $headerszakaz = "MIME-Version: 1.0\r\n"; $headerszakaz .= "Content-Type: $content charset=$charset\r\n"; $headerszakaz .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n"; $headerszakaz .= "From: \"Жилой комплекс: все планировки с ценами\" <" . $mailto . ">\r\n"; $headerszakaz .= "X-Mailer: My Send E-mail\r\n"; $headerszakaz .="attachment"; public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment') { try { if (!@is_file($path)) { throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE); } // If a MIME type is not specified, try to work it out from the file name if ($type == '') { $type = self::filenameToType($path); } $filename = basename($path); if ($name == '') { $name = $filename; } $this->attachment[] = array( 0 => $path, 1 => $filename, 2 => $name, 3 => $encoding, 4 => $type, 5 => false, // isStringAttachment 6 => $disposition, 7 => 0 ); } catch (phpmailerException $exc) { $this->setError($exc->getMessage()); $this->edebug($exc->getMessage()); if ($this->exceptions) { throw $exc; } return false; } return true; } /** * Return the array of attachments. * @return array */ public function getAttachments() { return $this->attachment; } а потом еще PHP: mail("$mailto", "$subject", "Посетитель сайта скачал файл: $message", "$headers"); //отправляем сообщение нам mail($_POST['posEmail'], "$subject", "Спасибо, что интересуетесь!: $Attachment $message", "$headerszakaz"); //отправляем сообщение заказчику unset($name, $posText, $mailto, $subject, $posRegard, $message); $statusSuccess = "$send"; } но только чтобы это работало, а не как сейчас. Если это слишком сложно, я пойму :' )
Есть файл-каталог. Пользователь заходит на сайт и заполняет поля имя-имейл-номертелефона. Нажимает кнопку "получить файл". В это время админу на почту идет уведомление о том, что человек оставил данные, а посетителю достается тот самый файл, но тоже на почту.
хитро, а что мешает админу отправить одно письмо, а пользователю другое + файл? у тебя и ход мыслей правильный, два вызова mail()
Проблема только в том, что я не могу правильно прикрепить файл ко второму письму: все время ломаю код. А так как я еще не очень, то прошу помощи на форуме
В упор не вижу прикрепление, открытие, шифрование base64 и всех необходимых заголовков. Ты вообще не разбираешься в заголовках и шифрации ? Если нет то попробую разжувать. Но сначала ответь, что ты понимаешь, а что нет?
Это мой первый опыт работы с php, я конечно немного понимаю, что происходит в коде выше, но написать такой или изменить его не могу
тут обычно помогают готовым кодом, просто ещё не нашёлся кто-то. если ты хочешь научиться писать программы на PHP, то лучше начать с более простого.
Хочу, но клиент требует форму на сайте, а времени на изучение основ требуется довольно много. Что сказать, я хотябы попытался)
Жаль! Думал ты хоть, что - то понимаешь. Тебе вообщем нужен готовый вариант и сам ты не знаешь и не умеешь Ясно! Будет время накатаю пример. Нужно написать одну пользовательскую функцию которая сможет прикреплять файлы, слать картинки в теле в виде html конверта, а также обычное письмо без вложений и html. 3 операции на 1 функцию. Ну конечно можно создать класс и напичкать его какашками ))
Весьма дельный совет, все время на себя рассчитывать глупо. А сколько примерно такая работа может стоить?
открывай тему в этом разделе https://php.ru/forum/forums/php-free-lance.4/ можно рассчитывать на 2-3 часа работы, один час может $10-30 стоит. когда здания одноразовые , то дороже выходит, ну и ещё как повезёт