За последние 24 часа нас посетили 20256 программистов и 1084 робота. Сейчас ищут 792 программиста ...

Добавить к отправленному письму файл с сервера

Тема в разделе "Сделайте за меня", создана пользователем system0, 6 июн 2016.

  1. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Доброго времени суток!

    Есть код
    PHP:
    1. <?php
    2.  
    3. include('kcaptcha/kcaptcha.php');
    4. require_once("config.php");
    5.  
    6.  
    7. function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
    8.    $this->parts[] = array(
    9.        "ctype" => $ctype,
    10.        "message" => $message,
    11.        "encode" => $encode,
    12.        "name" => $name
    13.    );
    14. }
    15.  
    16.  
    17. if ($_POST['act'] == "y") {
    18.    if (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']) {
    19.      
    20.        if (isset($_POST['posName']) && $_POST['posName'] == "") {
    21.            $statusError = "$errors_name";
    22.        } elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "") {
    23.            $statusError = "$errors_mailfrom";
    24.        } elseif (isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail'])) {
    25.            $statusError = "$errors_incorrect";
    26.          
    27.            unset($_POST['posEmail']);
    28.        } elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "") {
    29.            $statusError = "$errors_subject";
    30.        } elseif (isset($_POST['posText']) && $_POST['posText'] == "") {
    31.            $statusError = "$errors_message";
    32.        } elseif (!empty($_POST)) {
    33.            //заголовок для нас
    34.            $headers = "MIME-Version: 1.0\r\n";
    35.            $headers .= "Content-Type: $content charset=$charset\r\n";
    36.            $headers .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n";
    37.            $headers .= "From: \"Заказ с сайта " . $_POST['posName'] . "\" <" . $_POST['posEmail'] . ">\r\n";
    38.            $headers .= "X-Mailer: My Send E-mail\r\n";
    39.          
    40.            //заголовок для заказчика
    41.            $headerszakaz = "MIME-Version: 1.0\r\n";
    42.            $headerszakaz .= "Content-Type: $content charset=$charset\r\n";
    43.            $headerszakaz .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n";
    44.            $headerszakaz .= "From: \"Жилой комплекс: все планировки с ценами\" <" . $mailto . ">\r\n";
    45.            $headerszakaz .= "X-Mailer: My Send E-mail\r\n";
    46.          
    47.          
    48.          
    49.            mail("$mailto", "$subject", "Посетитель сайта скачал файл: $message", "$headers"); //отправляем сообщение нам
    50.            mail($_POST['posEmail'], "$subject", "Спасибо, что интересуетесь!: $message", "$headerszakaz"); //отправляем сообщение заказчику
    51.          
    52.            unset($name, $posText, $mailto, $subject, $posRegard, $message);
    53.          
    54.            $statusSuccess = "$send";
    55.        }
    56.      
    57.    } else {
    58.        $statusError = "$captcha_error";
    59.        unset($_SESSION['captcha_keystring']);
    60.    }
    61. }
    62. ?>
    Работает он отлично, но нужно прикрепить один и тот же файл при отправке письма каждому клиенту (обычный pdf) в $headerszakaz

    Когда пытаюсь добавить аттач он выдает ошибку, что не находит заявленную функцию, а если пытаюсь добавить "нормально" с указанием типа контента и разделителями, код просто не выполняется.

    Вероятно, решение довольно простое, но у меня что-то не получается, буду благодарен за помощь.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Тут дело в том что нужно почтовый стандарт соблюдать.

    Проще воспользоваться PHPMailer или Swift чтобы отправить письмо, они всё за тебя сделают.
    https://github.com/PHPMailer/PHPMailer тут на главной есть примеры и папка examples с примерами, скачать через composer или download -> download zip
    пример с прикреплением файла https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_file_upload.phps
     
    system0 нравится это.
  3. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Спасибо за ссылку!

    Просто у меня немного иные задачи: файл уже загружен и должен быть просто прикреплен к тому, что и так отправляется, а он этого не хочет (и, судя по всему, не может).

    PHP:
    1. function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
    2.    $this->parts[] = array(
    3.        "ctype" => $ctype,
    4.        "message" => $message,
    5.        "encode" => $encode,
    6.        "name" => $name
    7.    );
    8. }
    Этот кусок, вероятно, совсем лишний. Можно ли как-то изменить код под нужный не сильно всё переделывая?
    --- Добавлено ---
    Например:

    PHP:
    1.            //заголовок для заказчика
    2.            $headerszakaz = "MIME-Version: 1.0\r\n";
    3.            $headerszakaz .= "Content-Type: $content charset=$charset\r\n";
    4.            $headerszakaz .= "Date: " . date("Y-m-d (H:i:s)", time()) . "\r\n";
    5.            $headerszakaz .= "From: \"Жилой комплекс: все планировки с ценами\" <" . $mailto . ">\r\n";
    6.            $headerszakaz .= "X-Mailer: My Send E-mail\r\n";
    7.            $headerszakaz .="attachment";
    8.  
    9.  
    10.  
    11.   public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
    12.     {
    13.         try {
    14.             if (!@is_file($path)) {
    15.                 throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
    16.             }
    17.  
    18.             // If a MIME type is not specified, try to work it out from the file name
    19.             if ($type == '') {
    20.                 $type = self::filenameToType($path);
    21.             }
    22.  
    23.             $filename = basename($path);
    24.             if ($name == '') {
    25.                 $name = $filename;
    26.             }
    27.  
    28.             $this->attachment[] = array(
    29.                 0 => $path,
    30.                 1 => $filename,
    31.                 2 => $name,
    32.                 3 => $encoding,
    33.                 4 => $type,
    34.                 5 => false, // isStringAttachment
    35.                 6 => $disposition,
    36.                 7 => 0
    37.             );
    38.  
    39.         } catch (phpmailerException $exc) {
    40.             $this->setError($exc->getMessage());
    41.             $this->edebug($exc->getMessage());
    42.             if ($this->exceptions) {
    43.                 throw $exc;
    44.             }
    45.             return false;
    46.         }
    47.         return true;
    48.     }
    49.  
    50.     /**
    51.      * Return the array of attachments.
    52.      * @return array
    53.      */
    54.     public function getAttachments()
    55.     {
    56.         return $this->attachment;
    57.     }
    а потом еще

    PHP:
    1.            mail("$mailto", "$subject", "Посетитель сайта скачал файл: $message", "$headers"); //отправляем сообщение нам
    2.            mail($_POST['posEmail'], "$subject", "Спасибо, что интересуетесь!: $Attachment $message", "$headerszakaz"); //отправляем сообщение заказчику
    3.        
    4.            unset($name, $posText, $mailto, $subject, $posRegard, $message);
    5.        
    6.            $statusSuccess = "$send";
    7.        }

    но только чтобы это работало, а не как сейчас. Если это слишком сложно, я пойму :' )
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    вот тут надо по подробнее, чтобы понять
     
  5. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Есть файл-каталог. Пользователь заходит на сайт и заполняет поля имя-имейл-номертелефона. Нажимает кнопку "получить файл". В это время админу на почту идет уведомление о том, что человек оставил данные, а посетителю достается тот самый файл, но тоже на почту.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    хитро, а что мешает админу отправить одно письмо, а пользователю другое + файл?
    у тебя и ход мыслей правильный, два вызова mail()
     
  7. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Проблема только в том, что я не могу правильно прикрепить файл ко второму письму: все время ломаю код.

    А так как я еще не очень, то прошу помощи на форуме
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    что значит ломаешь код?
     
  9. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    он не работает)

    ну, перестает, тоесть
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ну а ошибки пишет?

    или не доходят письма?
     
  11. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0

    не доходит письмо, и при нажатии на кнопку просто обновляется страница
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    а mail() возвращает TURE что всё хорошо?
     
  13. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Мне жаль, но этот вопрос для меня слишком сложный

    попробую посмотреть что там
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Может по позже кто-то поможет. Ну или можешь написать в раздел free-lance, там за деньги сделают
     
    system0 нравится это.
  15. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    В упор не вижу прикрепление, открытие, шифрование base64 и всех необходимых заголовков.
    Ты вообще не разбираешься в заголовках и шифрации ? Если нет то попробую разжувать.
    Но сначала ответь, что ты понимаешь, а что нет?
     
    system0 нравится это.
  16. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Это мой первый опыт работы с php, я конечно немного понимаю, что происходит в коде выше, но написать такой или изменить его не могу
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    тут обычно помогают готовым кодом, просто ещё не нашёлся кто-то.
    если ты хочешь научиться писать программы на PHP, то лучше начать с более простого.
     
  18. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Хочу, но клиент требует форму на сайте, а времени на изучение основ требуется довольно много. Что сказать, я хотябы попытался)
     
  19. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Жаль! Думал ты хоть, что - то понимаешь.
    Тебе вообщем нужен готовый вариант и сам ты не знаешь и не умеешь ;)
    Ясно! Будет время накатаю пример.

    Нужно написать одну пользовательскую функцию которая сможет прикреплять файлы, слать картинки в теле в виде html конверта, а также обычное письмо без вложений и html. 3 операции на 1 функцию.

    Ну конечно можно создать класс и напичкать его какашками :)))
     
    system0 нравится это.
  20. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Звучит хорошо и непонятно, спасибо за внимание к моим печалям :)
     
  21. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    проще заказать в разделе free-lance там сделают за деньги
     
  22. system0

    system0 Новичок

    С нами с:
    6 июн 2016
    Сообщения:
    11
    Симпатии:
    0
    Весьма дельный совет, все время на себя рассчитывать глупо. А сколько примерно такая работа может стоить?
     
  23. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    открывай тему в этом разделе https://php.ru/forum/forums/php-free-lance.4/
    можно рассчитывать на 2-3 часа работы, один час может $10-30 стоит. когда здания одноразовые , то дороже выходит, ну и ещё как повезёт
     
    system0 нравится это.