• Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Вроде нечего и не правил такого что бы могло к чему то привести но при попытке отправить сразу ложится всё. Хз что не так(((
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Он 100 процентов нужен?
    Получилось так. Надеюсь не где не накосячил и не запорол в момент его правки.
    <?php
    	class phpmail
    	{
        private $bound;
    
        private $header;
    
        private $subject = '(No subject)';
    
        private $adress = [];
    
        private $body;
    
        public function __construct($text)
        {
            $this->addBodyMessage($text);
            $this->bound();
        }
    
        private function sendMailUtf8($adress, $subject, $message, $header)
        {
            return mail($adress, '=?UTF-8?B?' . base64_encode($subject) . '?=', $message,
                'MIME-Version: 1.0' . PHP_EOL . $header);
        }
    
        public function send()
        {
            if (count($this->adress) === 0) {
                throw new \Exception('Отсутствует адресат');
            }
            $this->getHeader();
            foreach ($this->adress as $adress) {
                $this->sendMailUtf8($adress, $this->getSubject(), $this->getBody(), $this->getHeader());
            }
        }
    
        public function addAdress($mail)
        {
            $this->adress[] = $mail;
            return $this;
        }
    
        private function addBodyMessage($text)
        {
            $this->body .= '--' . $this->bound() . PHP_EOL .
                'Content-Type: text/plain; charset="UTF-8"' . PHP_EOL .
                'Content-Disposition: inline' . PHP_EOL .
                'Content-Transfer-Encoding: base64' . PHP_EOL . PHP_EOL .
                chunk_split(base64_encode($text)) . PHP_EOL;
        }
    
        public function addFile($fileName, $fileStream)
        {
            $this->body .= PHP_EOL . '--' . $this->bound() . PHP_EOL .
                'Content-Type: application/octet-stream; name="' . $fileName . '"' . PHP_EOL .
                'Content-Disposition: attachment;' . PHP_EOL .
                ' filename="' . $fileName . '"' . PHP_EOL .
                'Content-Transfer-Encoding: base64' . PHP_EOL . PHP_EOL . chunk_split(base64_encode($fileStream));
    
            return $this;
        }
    
        private function endBody()
        {
            return '--' . $this->bound() . '--';
        }
    
        private function getBody()
        {
            return $this->body . $this->endBody();
        }
    
        private function bound()
        {
            if (!$this->bound) {
                $this->bound = '_=_Multipart_Boundary_' . substr(md5(uniqid()), 0, 8);
            }
    
            return $this->bound;
        }
    
        public function setSubject($subject)
        {
            if ($subject) {
                $this->subject = $subject;
            }
    
            return $this;
        }
    
        private function getSubject()
        {
            return $this->subject;
        }
    
        private function getHeader()
        {
            if (!$this->header) {
                $this->header = 'Content-Type: multipart/mixed; boundary="' . $this->bound() . '"' . PHP_EOL . 'X-Mailer: PHP' . PHP_EOL . 'Reply-To: No reply' . PHP_EOL;
            }
            return $this->header;
        }
    
        public function debug()
        {
            echo '<pre>' . print_r($this, true) . '</pre>';
        }
    	}
    
    	?>
    
    <?php
    
    echo '<pre>' . print_r($_POST, true) . '</pre>';
    echo '<pre>' . print_r($_FILES, true) . '</pre>';
    
    function clear_data($str)
    {
      return trim(strip_tags($str));	
    }
    
    $nameFF = clear_data($_POST['name']);
    $mailFF = clear_data($_POST['mail']);
    $addressFF = clear_data($_POST['address']);
    $messFF = clear_data($_POST['mess']);
    
    $message = "<br />  <b>Фамилия Имя Отчество:</b> $name <br />  <b>Электронная почта:</b> $mail <br />  <b>Адрес места жительства:</b> $address <br />  <b>Cообщение:</b>  $mess <br />  <b>Дополнительные документы и (или) сведения:</b>";
    $subject = "Заполнена контактная форма";
    $to = "почта";
    
    $test = new phpmail(message);
    
    $exts = ['jpg', 'gif', 'jpeg', 'png', 'doc', 'txt', 'gif', 'pdf', 'docx', 'xlsx','rar']; // добавить по вкусу
    
    $test->addAdress($to);
    foreach ($_FILES['mail_file']['tmp_name'] as $key => $file) {
      $info = pathinfo(file);
      if (filesize($file) <= 5242880 && in_array($info['extension'], $exts)) {
        $test->addFile($_FILES['mail_file']['name'][$key], file_get_contents($file));
      } else {
        // тут можно написать что файл не канает
      }
    }
    
    $test->setSubject($subject)
    $test->send();
    #$test->debug();
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Доброго утра! Спасибо. Сейчас попробую. Немного не понятно кусок кода который идёт до формы.
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, А принцип его работы какой? Могу ли я форму отделить? И с помощью этого файла вложения не храниться на сервере и забиты только под расширение которые введу?
    А что не так с этим кодом который я кидал ранее? Может его быстрее и проще подправить что бы вложения сразу стирались после отправки. Тогда не пришлось бы лочить расширение файлов. Или я ошибаюсь???
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Спасибо большое. А это один файл который и форма и отправщик?
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Ну вот я не понимаю как сделать так что бы файл отправлялся но при этом на сервере не оставался. Ограничить его 5 мб и тогда не придётся делать рамки расширений файла.
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Да как будет время у Вас. Знаю когда загружаю файл то он остаётся прямо в корневой папке где лежит сайт и не удаляется после отправки. а вот этот код где Вы написали это править в коде где закачиваем файл или же нет?

    // Закачиваем файл 
    
        $path =  $_FILES['mail_file']['name']; 
    
        if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Спасибо конечно. Но так и нечего не понял. Так же и не понял как настроить что бы ложился файл в определённую папку. Или не ложился вовсе, типо после отправки сразу удалялся.
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, Всё заработало. Вложения приходят. А такой вопрос может знаете. Как сделать (Разрешенные расширения файлов: .jpg,.gif,.jpeg,.png,.doc,.txt,.html,.htm,.pdf,.xls,.docx,.xlsx,.zip,.rar,.tgz,.gz,.bz2,.log)
    Максимальный размер файла 5 MB? Спасибо ОГРОМЕННОЕ за Вашу помощь
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, А я вот правильно сделал??? Спасибо что помогаете.
    Форма
    <table>
    <span style="font-size: 18px;"><b><p>Электронное обращение для граждан</p></b></span>
    
    <p>Если вы хотите получить ответы на интересующие Вас вопросы, заполните эту форму. Мы свяжемся с вами в ближайшее время.</p>
    <p><b>Пожалуйста, заполните все обязательные поля:</p></b>
    <tr>
    <form method="post" action="phMailer.php" enctype='multipart/form-data'>
    <div id="form3">
    <div class="inp">
    <p><b>Фамилия, имя, отчество (если таковое имеется) / Прозвiшча, iмя, iмя па-бацьку :</b></p>
    <input class="inp-f" type="text" name="nameFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <p><b>Ваш E-mail:</b></p>
    <input class="inp-f" type="text" name="mailFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <p><b>Адрес места жительства (места пребывания) / Адрас месца жыхарства (месца знаходжання):</b></p>
    <input class="inp-f" type="text" name="addressFF" value="" /> 
    <div class="error"> </div>
    </div>
    <p><b>Cообщение / Паведамленне:</b></p>
    <div class="inp"><textarea style="margin: 0px; width: 421px; height: 185px;" name="messFF"></textarea> 
    <div class="error"> </div>
    </div>
    <b><p>Дополнительные документы и (или) сведения /Дадатковыя дакументы і (або) звесткі:</p></b>
    <input type="file" name="mail_file[]"  maxlength="64">
    </div>
    <div class="inp"><br /><input class="btn" title="Отправить" type="submit" value="ОТПРАВИТЬ" /></div>
    <p> </p>
    </form></td>
    </tr>
    </tbody>
    </table>


    phpMiller
    <?php
    if (isset($_POST['nameFF'])) {$nameFF = $_POST['nameFF'];}
    if (isset($_POST['mailFF'])) {$mailFF = $_POST['mailFF'];}
    if (isset($_POST['addressFF'])) {$addressFF = $_POST['addressFF'];}
    if (isset($_POST['messFF'])) {$messFF = $_POST['messFF'];}
    if (isset($_POST['mail_file'])) {$mail_file = $_POST['mail_file'];}
    
    $picture = ""; 
     
     function send_mail($to, $subject, $html, $path) 
    
      { 
    
        $fp = fopen($path,"r"); 
    
        if (!$fp) 
    
        { 
    
          print "Файл $path не может быть прочитан"; 
    
          exit(); 
    
        } 
    
        $file = fread($fp, filesize($path)); 
    
        fclose($fp); 
    
        
    
        $boundary = "--".md5(uniqid(time())); // генерируем разделитель 
    
        $headers .= "MIME-Version: 1.0\n"; 
    
        $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
    
        $multipart .= "--$boundary\n"; 
    
        $kod = 'utf-8'; // или $kod = 'windows-1251'; 
    
        $multipart .= "Content-Type: text/html; charset=$kod\n"; 
    
        $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
    
        $multipart .= "$html\n\n"; 
    
    
    
        $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 = \"".$path."\"\n\n"; 
    
        $message_part .= chunk_split(base64_encode($file))."\n"; 
    
        $multipart .= $message_part."--$boundary--\n"; 
    
    
    
        if(!mail($to, $subject, $multipart, $headers)) 
    
        { 
    
          echo "К сожалению, письмо не отправлено"; 
    
          exit(); 
    
        } 
    
      } 
       
    function clear_data($vvod)
    {
    return trim(strip_tags($vvod));	
    }
    $nameFF = clear_data($_POST['nameFF']);
    $mailFF = clear_data($_POST['mailFF']);
    $addressFF = clear_data($_POST['addressFF']);
    $messFF = clear_data($_POST['messFF']);
    $mail_file = clear_data($_POST['mail_file']);
    
    $to = "Почта";// Переменная to равна переменной email, т.е. файл будет отправляться на тот адрес, который будет вбит в форму.
    $headers = "Content-type: text/plain; charset = utf-8"; 
    $subject = "Заполнена контактная форма";
    $message = "Фамилия Имя Отчество: $nameFF  \nЭлектронная почта: $mailFF \nАдрес места жительства: $addressFF  \nCообщение: $messFF \nДополнительные документы и (или) сведения $mail_file";
      if (!empty($_FILES['mail_file']['tmp_name'])) 
    
      { 
    
        // Закачиваем файл 
    
        $path = $_FILES['mail_file']['name']; 
    
        if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 
    
      } 
    
    if(empty($picture))
    {
    				$send = mail ($to, $subject, $message, $headers);
    					if ($send == "true")
    					{
    					echo "Спасибо за отправку Вашего сообщения.<br>\n";
    					}
    						else 
    						{
    						echo "Сообщение не отправлено. Приносим свои извинения. Видимо сервер не может обработать ваше сообщение, скопируйте этот email почта и отправьте из своей почты. ";
    						}
    				}
    
    else
    {
    			 	send_mail($to, $subject, $message, $picture); 
    			 	echo "Письмо отправлено!"; 
    				}
    
    ?>
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, ну вот я настроил что текст приходит но опять же не приходят вложения
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    Дмитрий, доброго утра попробовал через сам хостер отправить вот с такого отправщика опять же текст доходит а вложение нет. хз почему
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <? 
    
     $picture = "";
     $picture2 = "";
     $picture3 = "";
      // Если поле выбора вложения не пустое - закачиваем его на сервер
      if (!empty($_FILES['mail_file']['tmp_name']) && !empty($_FILES['mail_file2']['tmp_name']) && !empty($_FILES['mail_file3']['tmp_name']))
      {
        // Закачиваем файл
        $path = "zav/".$_FILES['mail_file']['name'];
        $path2 = "zav/".$_FILES['mail_file2']['name'];
          $path3 = "zav/".$_FILES['mail_file3']['name'];
        if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
        if (copy($_FILES['mail_file2']['tmp_name'], $path2)) $picture2 = $path2;
            if (copy($_FILES['mail_file3']['tmp_name'], $path3)) $picture3 = $path3;
    
      }
    
    function clear_data($vvod)
    {
    return trim(strip_tags($vvod));	
    }
    $fam = clear_data($_POST['fam']);
    $name =  clear_data($_POST['name']);
    $otch =  clear_data($_POST['otch']);
    $date =  clear_data($_POST['date']);
    $snils =  clear_data($_POST['snils']);
    $email = clear_data($_POST['email']);
    $adres =  clear_data($_POST['adres']);
    
    
      $thm = "Заявка для ответственного по БДД";
      $msg = "<p><font face=Verdana, Arial, Helvetica, sans-serif size=+1 color=#003366>Информация о поступившей заявке:</font></p>
    <p><font face=Verdana, Arial, Helvetica, sans-serif size=-1 color=#333333>
    Фамилия: $fam <br> \nИмя: $name <br> \nОтчетство: $otch <br> \nДата рождения: $date <br>\nСНИЛС: $snils <br> \nЭлектронная почта: $email <br> \nАдрес по месту жительства: $adres";
      $mail_to = "anya.prid@mail.ru";
      // Отправляем почтовое сообщение
      if(empty($picture)) mail($mail_to, $thm, $msg);
      else send_mail($mail_to, $thm, $msg, $picture, $picture2,$picture3);
      // Вспомогательная функция для отправки почтового сообщения с вложением
      function send_mail($to, $thm, $html, $path, $path2, $path3)
      {
        $fp = fopen($path,"r");
        if (!$fp)
        {
          print "Файл $path не может быть прочитан";
          exit();
        }
        $file = fread($fp, filesize($path));
        fclose($fp);
        $fp2 = fopen($path2,"r");
        if (!$fp2)
        {
          print "Файл $path2 не может быть прочитан";
          exit();
        }
        $file2 = fread($fp2, filesize($path2));
        fclose($fp2);
      
    $fp3 = fopen($path3,"r");
        if (!$fp3)
        {
          print "Файл $path3 не может быть прочитан";
          exit();
        }
        $file3 = fread($fp3, filesize($path3));
        fclose($fp3);
    
        $boundary = "--".md5(uniqid(time())); // генерируем разделитель
        $headers .= "MIME-Version: 1.0\n";
        $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
        $multipart .= "--$boundary\n";
        $kod = 'utf-8';
        $multipart .= "Content-Type: text/html; charset=$kod\n";
        $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
        $multipart .= "$html\n\n";
        $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 = \"".$path."\"\n\n";
        $message_part .= chunk_split(base64_encode($file))."\n";
        $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 = \"".$path2."\"\n\n";
        $message_part .= chunk_split(base64_encode($file2))."\n";
         $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 = \"".$path3."\"\n\n";
        $message_part .= chunk_split(base64_encode($file3))."\n";
      
        $multipart .= $message_part."--$boundary--\n";
    
        
      //  if(!mail($to, $thm, $multipart, $headers))
      //  {
      //    echo "К сожалению, письмо не отправлено";
      //    exit();
      //  }
     // }
      if(!mail($to, $thm, $multipart, $headers)) 
    
        { 
    
          echo "К сожалению, письмо не отправлено"; 
    
          exit(); 
    
        } 
    
      } 
      if(empty($picture))
    {
    				$send = mail ($to, $thm, $msg, $headers);
    					if ($send == "true")
    					{
    					echo "Спасибо за отправку Вашего сообщения.<br>\n";
    					echo "<a href=index.html>Вернуться на страницу с описанием</a><br>\n";
    					}
    						else 
    						{
    						echo "Сообщение не отправлено. Приносим свои извинения. Видимо сервер не может обработать ваше сообщение, скопируйте этот email Vasia@mail.ru и отправьте из своей почты. ";
    						}
    				}
    
    else
    {
    			 	send_mail($to, $thm, $msg, $picture, $picture2, $picture3); 
    			 	echo "Заявка отправлена!"; 
    			 	echo "<a href=mailtest.php>Вернуться назад</a>";
    				 
    				}
    				exit();
      
    ?>
    </head>
    </html>
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, Спасибо огроменное за помощь. сейчас попробую
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, как я понял Вы добавили эту часть в форму

    $mail = new PHPMailer();
      $mail->isSMTP();
      $mail->Host = $config['smtp_host'];
      $mail->Port = $config['smtp_port'];
      $mail->SMTPAuth = true;
      $mail->Username = $config['smtp_username'];
      $mail->Password = $config['smtp_password'];
      $mail->setFrom($config['smtp_username'], $config['smtp_from']);
      $mail->addAddress($to);
      $mail->Subject = $subject;
      $mail->Body = $message;


    а phpmiller добавляется получается файл + файл сенд и тогда в теории должно заработать??
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, нет. Такой как и на верху показывал. Нечего в нём не менял. А что нужно там сменить?
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, это про какой файл идёт речь???
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, Знать бы что там разбирать.
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, Получилось вот что? Я надеюсь правильно сделал??

    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    </head>
    <body>
     <table>
    <span style="font-size: 18px;"><b><p>Электронное обращение для граждан</p></b></span>
    
    <p>Если вы хотите получить ответы на интересующие Вас вопросы, заполните эту форму. Мы свяжемся с вами в ближайшее время.</p>
    <p><b>Пожалуйста, заполните все обязательные поля:</p></b>
    <tr>
    <td><form method="POST" action="http://ujrep.by/contacts1.php" name="contactFF" enctype="multipart/form-data">
    <div id="form1">
    <div class="inp">
    <b><p>Фамилия, имя, отчество (если таковое имеется) / Прозвiшча, iмя, iмя па-бацьку :</p></b>
    <input class="inp-f" type="text" name="nameFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <b><p>Ваш E-mail:</p></b>
    <input class="inp-f" type="text" name="mailFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <b><p>Адрес места жительства (места пребывания) / Адрас месца жыхарства (месца знаходжання):</p></b>
    <input class="inp-f" type="text" name="addressFF" value="" /> 
    <div class="error"> </div>
    </div>
    <b><p>Cообщение / Паведамленне:</p>
    <div class="inp"><textarea style="margin: 0px; width: 421px; height: 185px;" name="messFF"></textarea> 
    <div class="error"> </div>
    </div>
    <b><p>Дополнительные документы и (или) сведения /Дадатковыя дакументы і (або) звесткі:</p></b>
    <div class="inp"><input id="file" type="file" name="fileFF" size="100000000" /></div>
    </div>
    <div class="inp"><br /><input class="btn" title="Отправить" type="submit" value="ОТПРАВИТЬ" /></div>
    <p> </p>
    </form></td>
    </tr>
    </tbody>
    </table>
    </form>
    
    	</body>
  • Почему не отправляется файл прикрепления через SMTP?

    @Wyfer Автор вопроса
    galaxy, Вот так вот???

    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    </head>
    <body>
    
    <form enctype="multipart/form-data" method="post" id="form">
     <table>
    <span style="font-size: 18px;"><b><p>Электронное обращение для граждан</p></b></span>
    
    <p>Если вы хотите получить ответы на интересующие Вас вопросы, заполните эту форму. Мы свяжемся с вами в ближайшее время.</p>
    <p><b>Пожалуйста, заполните все обязательные поля:</p></b>
    <tr>
    <div id="form1">
    <div class="inp">
    <b><p>Фамилия, имя, отчество (если таковое имеется) / Прозвiшча, iмя, iмя па-бацьку :</p></b>
    <input class="inp-f" type="text" name="nameFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <b><p>Ваш E-mail:</p></b>
    <input class="inp-f" type="text" name="mailFF" value="" /> 
    <div class="error"> </div>
    </div>
    <div class="inp">
    <b><p>Адрес места жительства (места пребывания) / Адрас месца жыхарства (месца знаходжання):</p></b>
    <input class="inp-f" type="text" name="addressFF" value="" /> 
    <div class="error"> </div>
    </div>
    <b><p>Cообщение / Паведамленне:</p>
    <div class="inp"><textarea style="margin: 0px; width: 421px; height: 185px;" name="messFF"></textarea> 
    <div class="error"> </div>
    </div>
    <b><p>Дополнительные документы и (или) сведения /Дадатковыя дакументы і (або) звесткі:</p></b>
    <div class="inp"><input id="file" type="file" name="fileFF" size="100000000" /></div>
    </div>
    <div class="inp"><br /><input class="btn" title="Отправить" type="submit" value="ОТПРАВИТЬ" /></div>
    <p> </p>
    </form></td>
    </tr>
    </tbody>
    </table>
    </form>
    
    	<script>
    $(function(){
      'use strict';
    $('#form').on('submit', function(e){
        e.preventDefault();
        var fd = new FormData( this );
        $.ajax({
          url: 'send.php',
          type: 'POST',
          contentType: false, 
          processData: false, 
          data: fd,
          success: function(msg){
    if(msg == 'ok') {
      alert('Отправлено')
    } else {
      alert('Ошибка')
    }
          }
        });
      });
    });
    </script>
    	</body>