<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@shpagin</title><author><name>@shpagin</name></author><id>https://teletype.in/atom/shpagin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/shpagin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@shpagin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=shpagin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/shpagin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T16:44:43.242Z</updated><entry><id>shpagin:phpmailer</id><link rel="alternate" type="text/html" href="https://teletype.in/@shpagin/phpmailer?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=shpagin"></link><title>Вменяемая инструкция к PHPMailer. Отправка писем и файлов на почту.</title><published>2023-03-24T15:49:13.477Z</published><updated>2024-01-23T08:00:01.740Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b1/15/b1155d5e-1dba-4004-bd76-5a6d94fb968d.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/cf/d8/cfd8dc94-d728-4dfb-b8ce-00b23e6cc581.png&quot;&gt;Это инструкция по добавлению на ваш сайт PHPMailer и отправки писем с прикреплёнными файлами к вам на почту без перезагрузки страницы.</summary><content type="html">
  &lt;figure id=&quot;dC6e&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/d8/cfd8dc94-d728-4dfb-b8ce-00b23e6cc581.png&quot; width=&quot;1400&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;IbrN&quot;&gt;PHPMailer - это самый простой способ отправить себе на почту сообщение. Мне самому не нравится использовать для работы базового функционала сторонние библиотеки, но почтовая система до неприличия неудобная, поэтому выхода у нас нет&lt;/h2&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;1KeD&quot;&gt;Вот это вы можете получить:&lt;/h3&gt;
  &lt;figure id=&quot;OjUE&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8c/05/8c05b58a-c506-402a-b60a-49484bc69bb6.jpeg&quot; width=&quot;1280&quot; /&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://github.com/shpgn/phpm/releases/download/v0.1/phpmailer_form.zip&quot; target=&quot;_blank&quot;&gt;Ссылка для скачивания этой формы&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;1gyN&quot;&gt;О чем эта инструкция&lt;/h2&gt;
  &lt;p id=&quot;c72f&quot;&gt;Это инструкция по добавлению на ваш сайт PHPMailer и отправки писем с прикреплёнными файлами к вам на почту без перезагрузки страницы.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;S1h2&quot;&gt;1. Скачиваем PHPMailer&lt;/h2&gt;
  &lt;p id=&quot;n9nD&quot;&gt;Переходим на сайт &lt;a href=&quot;https://github.com/PHPMailer/PHPMailer&quot; target=&quot;_blank&quot;&gt;https://github.com/PHPMailer/PHPMailer&lt;/a&gt; и скачиваем последнюю версию&lt;/p&gt;
  &lt;figure id=&quot;iHoP&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/35/54/3554a021-ca6c-4929-99c5-7d1409e11aa0.png&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8bNk&quot;&gt;Во всём архиве нам нужны только 3 файла:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;j9cV&quot;&gt;&lt;strong&gt;PHPMailer-master\src\PHPMailer.php&lt;br /&gt;PHPMailer-master\src\SMTP.php&lt;br /&gt;PHPMailer-master\src\Exception.php&lt;/strong&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;Zdhf&quot;&gt;&lt;em&gt;Всё остальное, что хранится на Github — на*уй не нужно, можете удалять.&lt;/em&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;38c1&quot;&gt;2. Удаляем из файлов весь хлам&lt;/h2&gt;
  &lt;p id=&quot;b49e&quot;&gt;&lt;em&gt;Этот пункт вы можете пропустить. Он не является обязательным&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;SGdG&quot;&gt;Файлы, написанные разработчиками PHPMailer, содержат немереное количество мусора, состоящего из одних комментариев (зачем?!). Вес этих трёх файлов вместе с комментариями равен &lt;strong&gt;222кб&lt;/strong&gt;, после удаления комментов вес составит &lt;strong&gt;82кб&lt;/strong&gt;. Почти в 3 раза…&lt;/p&gt;
  &lt;p id=&quot;6828&quot;&gt;Я предлагаю удалить все комментарии в файлах с помощью какого-нибудь “PHP минификатора”. Можете использовать любой, я взял (первый попавшийся) &lt;a href=&quot;http://php-minify.com/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;http://php-minify.com&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;ol id=&quot;yKAi&quot;&gt;
    &lt;li id=&quot;6a81&quot;&gt;Открываете файл&lt;/li&gt;
    &lt;li id=&quot;a2cf&quot;&gt;Копируете содержимое файла&lt;/li&gt;
    &lt;li id=&quot;4be3&quot;&gt;Вставляете в форму на сайте php-minify и жмёте “&lt;strong&gt;COMPRESS”&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;f049&quot;&gt;Результат перезаписываем&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;d484&quot;&gt;Процедуру повторяете со всеми тремя файлами.&lt;/p&gt;
  &lt;p id=&quot;b3d9&quot;&gt;Для наглядности файл &lt;strong&gt;Exception.php&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Ldpg&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d0/b7/d0b70629-45ab-4ea2-9145-785cfcdf4c34.png&quot; width=&quot;1015&quot; /&gt;
    &lt;figcaption&gt;слева - до сжатия, справа - после&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;38cf&quot;&gt;3. Перемещаем файлы в проект&lt;/h2&gt;
  &lt;p id=&quot;jaEi&quot;&gt;И теперь помещаем эти 3 файла на наш сайт. Я создал специально для этих файлов папку под названием &lt;strong&gt;phpmailer&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;ce28&quot;&gt;4. Создаём файл конфигурации&lt;/h2&gt;
  &lt;p id=&quot;6b1e&quot;&gt;Создадим файл &lt;strong&gt;send.php&lt;/strong&gt; с таким содержанием&lt;/p&gt;
  &lt;pre id=&quot;dwB5&quot; data-lang=&quot;php&quot;&gt;&amp;lt;?php
// Файлы phpmailer
require &amp;#x27;phpmailer/PHPMailer.php&amp;#x27;;
require &amp;#x27;phpmailer/SMTP.php&amp;#x27;;
require &amp;#x27;phpmailer/Exception.php&amp;#x27;;

# проверка, что ошибки нет
if (!error_get_last()) {

    // Переменные, которые отправляет пользователь
    $name = $_POST[&amp;#x27;name&amp;#x27;] ;
    $email = $_POST[&amp;#x27;email&amp;#x27;];
    $text = $_POST[&amp;#x27;text&amp;#x27;];
    $file = $_FILES[&amp;#x27;myfile&amp;#x27;];
    
    
    // Формирование самого письма
    $title = &amp;quot;Заголовок письма&amp;quot;;
    $body = &amp;quot;
    &amp;lt;h2&amp;gt;Новое письмо&amp;lt;/h2&amp;gt;
    &amp;lt;b&amp;gt;Имя:&amp;lt;/b&amp;gt; $name&amp;lt;br&amp;gt;
    &amp;lt;b&amp;gt;Почта:&amp;lt;/b&amp;gt; $email&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;b&amp;gt;Сообщение:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;$text
    &amp;quot;;
    
    // Настройки PHPMailer
    $mail = new PHPMailer\PHPMailer\PHPMailer();
    
    $mail-&amp;gt;isSMTP();   
    $mail-&amp;gt;CharSet = &amp;quot;UTF-8&amp;quot;;
    $mail-&amp;gt;SMTPAuth   = true;
    //$mail-&amp;gt;SMTPDebug = 2;
    $mail-&amp;gt;Debugoutput = function($str, $level) {$GLOBALS[&amp;#x27;data&amp;#x27;][&amp;#x27;debug&amp;#x27;][] = $str;};
    
    // Настройки вашей почты
    $mail-&amp;gt;Host       = &amp;#x27;smtp.yandex.ru&amp;#x27;; // SMTP сервера вашей почты
    $mail-&amp;gt;Username   = &amp;#x27;username&amp;#x27;; // Логин на почте
    $mail-&amp;gt;Password   = &amp;#x27;password&amp;#x27;; // Пароль на почте
    $mail-&amp;gt;SMTPSecure = &amp;#x27;ssl&amp;#x27;;
    $mail-&amp;gt;Port       = 465;
    $mail-&amp;gt;setFrom(&amp;#x27;username@yandex.ru&amp;#x27;, &amp;#x27;Name&amp;#x27;); // Адрес самой почты и имя отправителя
    
    // Получатель письма
    $mail-&amp;gt;addAddress(&amp;#x27;poluchatel@ya.ru&amp;#x27;);  
    $mail-&amp;gt;addAddress(&amp;#x27;poluchatel2@gmail.com&amp;#x27;); // Ещё один, если нужен
    
    // Прикрипление файлов к письму
    if (!empty($file[&amp;#x27;name&amp;#x27;][0])) {
        for ($i = 0; $i &amp;lt; count($file[&amp;#x27;tmp_name&amp;#x27;]); $i++) {
            if ($file[&amp;#x27;error&amp;#x27;][$i] === 0) 
                $mail-&amp;gt;addAttachment($file[&amp;#x27;tmp_name&amp;#x27;][$i], $file[&amp;#x27;name&amp;#x27;][$i]);
        }
    }
    // Отправка сообщения
    $mail-&amp;gt;isHTML(true);
    $mail-&amp;gt;Subject = $title;
    $mail-&amp;gt;Body = $body;    
    
    // Проверяем отправленность сообщения
    if ($mail-&amp;gt;send()) {
        $data[&amp;#x27;result&amp;#x27;] = &amp;quot;success&amp;quot;;
        $data[&amp;#x27;info&amp;#x27;] = &amp;quot;Сообщение успешно отправлено!&amp;quot;;
    } else {
        $data[&amp;#x27;result&amp;#x27;] = &amp;quot;error&amp;quot;;
        $data[&amp;#x27;info&amp;#x27;] = &amp;quot;Сообщение не было отправлено. Ошибка при отправке письма&amp;quot;;
        $data[&amp;#x27;desc&amp;#x27;] = &amp;quot;Причина ошибки: {$mail-&amp;gt;ErrorInfo}&amp;quot;;
    }
    
} else {
    $data[&amp;#x27;result&amp;#x27;] = &amp;quot;error&amp;quot;;
    $data[&amp;#x27;info&amp;#x27;] = &amp;quot;В коде присутствует ошибка&amp;quot;;
    $data[&amp;#x27;desc&amp;#x27;] = error_get_last();
}

// Отправка результата
header(&amp;#x27;Content-Type: application/json&amp;#x27;);
echo json_encode($data);

?&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;NZUA&quot;&gt;&lt;strong&gt;Здесь вам нужно отредактировать эти поля под себя:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;OiLZ&quot; data-lang=&quot;php&quot;&gt;// Настройки вашей почты
$mail-&amp;gt;Host       = &amp;#x27;smtp.yandex.ru&amp;#x27;; // SMTP сервера вашей почты
$mail-&amp;gt;Username   = &amp;#x27;username&amp;#x27;; // Логин на почте
$mail-&amp;gt;Password   = &amp;#x27;password&amp;#x27;; // Пароль на почте
$mail-&amp;gt;SMTPSecure = &amp;#x27;ssl&amp;#x27;;
$mail-&amp;gt;Port       = 465;
$mail-&amp;gt;setFrom(&amp;#x27;username@yandex.ru&amp;#x27;, &amp;#x27;Name&amp;#x27;); // Адрес самой почты и имя отправителя

// Получатель письма
$mail-&amp;gt;addAddress(&amp;#x27;poluchatel@ya.ru&amp;#x27;);  
$mail-&amp;gt;addAddress(&amp;#x27;poluchatel2@gmail.com&amp;#x27;); // Ещё один, если нужен&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;922d&quot; data-align=&quot;center&quot;&gt;Нужно использовать не пароль от самой почты, а&lt;strong&gt; «&lt;u&gt;Пароль приложения&lt;/u&gt;»&lt;/strong&gt;. В настройках вашей почты, будь то Gmail, Yandex или Mailru — есть раздел &lt;strong&gt;«Пароли приложений»&lt;/strong&gt;, где вы можете специально создать отдельный сгенерированный пароль. Именно этот пароль нужно использовать&lt;/h3&gt;
  &lt;/section&gt;
  &lt;p id=&quot;JriH&quot;&gt;Сохраняем этот файл, как &lt;strong&gt;send.php&lt;/strong&gt; и помещаем его в корень сайта&lt;/p&gt;
  &lt;p id=&quot;da84&quot;&gt;В примере указаны настройки для &lt;strong&gt;Яндекса&lt;/strong&gt;. Вы можете использовать &lt;strong&gt;любую&lt;/strong&gt; почту для отправки. Для изменения почты отправки, к примеру, на Gmail — нужно изменить эти поля:&lt;/p&gt;
  &lt;pre id=&quot;fb01&quot; data-lang=&quot;php&quot;&gt;$mail-&amp;gt;Host = ‘smtp.gmail.com’; // SMTP сервер
$mail-&amp;gt;SMTPSecure = ‘ssl’; // шифрование
$mail-&amp;gt;Port = 465; // Порт&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;77d1&quot;&gt;5. Создаём HTML форму&lt;/h2&gt;
  &lt;p id=&quot;42e3&quot;&gt;Теперь поместим эту форму в нужное место на вашем сайте&lt;/p&gt;
  &lt;pre id=&quot;DPfu&quot; data-lang=&quot;html&quot;&gt;&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; method=&amp;quot;post&amp;quot; id=&amp;quot;form&amp;quot; onsubmit=&amp;quot;submitForm(event)&amp;quot; action=&amp;quot;send.php&amp;quot;&amp;gt;
	&amp;lt;p&amp;gt;Имя&amp;lt;/p&amp;gt;
	&amp;lt;input placeholder=&amp;quot;Представьтесь&amp;quot; name=&amp;quot;name&amp;quot; type=&amp;quot;text&amp;quot; &amp;gt;
	&amp;lt;p&amp;gt;Email&amp;lt;/p&amp;gt;
	&amp;lt;input placeholder=&amp;quot;Укажите почту&amp;quot; name=&amp;quot;email&amp;quot; type=&amp;quot;text&amp;quot; &amp;gt;
	&amp;lt;p&amp;gt;Сообщение&amp;lt;/p&amp;gt;
	&amp;lt;textarea name=&amp;quot;text&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;
	&amp;lt;p&amp;gt;Прикрепить файлы&amp;lt;/p&amp;gt;
	&amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;myfile[]&amp;quot; multiple id=&amp;quot;myfile&amp;quot;&amp;gt;
	&amp;lt;p&amp;gt;&amp;lt;input value=&amp;quot;Отправить&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;eab6&quot;&gt;6. Прописываем JavaScript&lt;/h2&gt;
  &lt;p id=&quot;7f16&quot;&gt;Нужно теперь просто где-то в коде разместить эту функцию. Вы можете её скопировать в свой script файл, который уже подключён в &amp;lt;head&amp;gt;, &lt;strong&gt;либо вставить его внизу перед тегом &amp;lt;/body&amp;gt;.&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;aOoI&quot; data-lang=&quot;javascript&quot;&gt;&amp;lt;script&amp;gt;
async function submitForm(event) {
  event.preventDefault(); // отключаем перезагрузку/перенаправление страницы
  try {
  	// Формируем запрос
    const response = await fetch(event.target.action, {
    	method: &amp;#x27;POST&amp;#x27;,
    	body: new FormData(event.target)
    });
    // проверяем, что ответ есть
    if (!response.ok) throw (&amp;#x60;Ошибка при обращении к серверу: ${response.status}&amp;#x60;);
    // проверяем, что ответ действительно JSON
    const contentType = response.headers.get(&amp;#x27;content-type&amp;#x27;);
    if (!contentType || !contentType.includes(&amp;#x27;application/json&amp;#x27;)) {
      throw (&amp;#x27;Ошибка обработки. Ответ не JSON&amp;#x27;);
    }
    // обрабатываем запрос
    const json = await response.json();
    if (json.result === &amp;quot;success&amp;quot;) {
    	// в случае успеха
    	alert(json.info);
    } else { 
    	// в случае ошибки
    	console.log(json);
    	throw (json.info);
    }
  } catch (error) { // обработка ошибки
    alert(error);
  }
}
&amp;lt;/script&amp;gt;&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;1b1e&quot;&gt;7. Всё (почти)&lt;/h2&gt;
  &lt;p id=&quot;52b3&quot;&gt;Форма у вас должна выглядеть вот так:&lt;/p&gt;
  &lt;figure id=&quot;iPhS&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/be/e2/bee20121-0a7e-47eb-b887-feecb1dca203.png&quot; width=&quot;253.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FWRp&quot;&gt;И в случае успеха (или неудачи) вы должны получить всплывающее сообщение от браузера, мол &lt;strong&gt;“Сообщение успешно отправлено!”&lt;/strong&gt; или &lt;strong&gt;“Ошибка…”.&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;9401&quot;&gt;8. Почему ошибка?&lt;/h2&gt;
  &lt;p id=&quot;0rFZ&quot;&gt;Это очень частый вопрос, где я с полной уверенностью могу сказать: &lt;strong&gt;60%&lt;/strong&gt; причин ошибок — это ваш сервер, &lt;strong&gt;30%&lt;/strong&gt; — ваша почта, &lt;strong&gt;9% &lt;/strong&gt;— вы неверно указали данные от почты, а&lt;strong&gt; 1% &lt;/strong&gt;причин —ты, с*ка, даун, который решил изменить код, а потом начинаешь &lt;strong&gt;искренне&lt;/strong&gt; удивляться, почему ничерта не работает.&lt;/p&gt;
  &lt;p id=&quot;PoL7&quot;&gt;Во первых нужно понять, что конкретно случилось. Для этого нужно открыть консоль и включить режим debug. Он включается путём раскомментирования строки &lt;strong&gt;//$mail→SMTPDebug = 2;&lt;/strong&gt; в файле send.php &lt;em&gt;(просто убери //)&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;76cf&quot;&gt;Консоль открывается клавишей F12 → Вкладка «Console».&lt;/p&gt;
  &lt;p id=&quot;O0yQ&quot;&gt;Когда консоль открыта, попробуй снова нажать кнопку «Отправить» и справа у тебя должна появиться новая строка, которую можно раскрыть. &lt;/p&gt;
  &lt;h3 id=&quot;iKTp&quot;&gt;&lt;strong&gt;Ошибка, потому что введён неверный пароль&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;ZdBc&quot;&gt;Вот так будет выглядеть ошибка, в случае, если что-то не так с паролем.&lt;/p&gt;
  &lt;figure id=&quot;0z6z&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/84/bc/84bc9d84-1105-44c6-aeb7-a4d7a1aa200f.png&quot; width=&quot;1280&quot; /&gt;
    &lt;figcaption&gt;Error: authentication failed: Invalid user or password! &lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;NR1O&quot;&gt;&lt;strong&gt;Ошибка, потому что почта блокирует работу SMTP&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;YTDi&quot;&gt;Да, такая дичь есть. Проверенно на свежезарегистрированных аккаунтах Яндекса. Лечится это письмом в техподдержку вашего почтового сервиса. Если возьмёте старую почту, то вероятность ошибки меньше. &lt;/p&gt;
  &lt;h3 id=&quot;Ynse&quot;&gt;Ошибка, потому что хостинг блокирует почту&lt;/h3&gt;
  &lt;p id=&quot;suT8&quot;&gt;В этот момент может быть вообще любая ошибка (не угадаешь), поэтому, если вы уверены, что с вашей стороны проблем нет и письма отправляются с локального компьютера, то просто пишем письмо в техподдержку хостинга, куда прикрепляем полученное сообщение из консоли.&lt;/p&gt;
  &lt;h3 id=&quot;ahSx&quot;&gt;Ошибка из-за размера данных&lt;/h3&gt;
  &lt;p id=&quot;PpNr&quot;&gt;К примеру, человек пытается загрузить файл размером 10гб. И допустим, вы не хотите, чтобы такой большой файл нагружал сервер и занимал место. Логично было бы рассуждать, что нам стоит установить проверку размера файла на моменте после &lt;strong&gt;&amp;quot;&lt;em&gt;if (!empty($file[&amp;#x27;name&amp;#x27;][0])) {&amp;quot;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;, &lt;/em&gt;что-то типа: &lt;em&gt;&amp;quot;Если файл больше 10мб - отобразить ошибку&amp;quot;&lt;/em&gt;.Но&lt;em&gt; е&lt;/em&gt;сли вы не отключали ограничение размера файлов (50мб обычно), то у вас возникнет проблема: файл тупо не дойдёт до проверки. Если в случае с Nginx вы увидите человеческую ошибку 413, которую можно обработать, то в случае с apache всё намного сложнее. Там тупо нет нормального обработчика ошибок. И самый сок: ошибка, которую выдаст Apache &lt;strong&gt;будет на нулевой строке. &lt;/strong&gt;Это значит, что обработать ошибку в коде, в случае если ошибки отображаются - невозможно. И да, ответ от сервера будет = 200, success))) Тип всё хорошо, дружище, держись там!&lt;/p&gt;
  &lt;p id=&quot;Fshv&quot;&gt;Допустим мы вырубаем отображение ошибок на 0 строке (параметр display_startup_errors) и проверяем, что там лежит в объекте error_get_last(). А нас там встречает вот такая дичь: &lt;strong&gt;&lt;em&gt;&amp;quot;Warning: POST Content-Length of 65129587 bytes exceeds the limit of 52428800 bytes in Unknown on line 0&amp;quot;. &lt;/em&gt;&lt;/strong&gt;А теперь сиди друг и разбирай строку, чтобы нормально сообщить пользователю о передозе размера файла. &lt;/p&gt;
  &lt;p id=&quot;vZiP&quot;&gt;Предположим, что вы арендуете облачный сервер с apache и менять настройки его мы не можете. И предположим, что отображение ошибок на 0 строке у вас активировано. Учитывая, что этот дурак шлёт строку &amp;quot;Warning...&amp;quot;, то скрипт разобрать JSON не сможет, потому что его нет. И как вы понимаете, клиент увидит ошибку &lt;strong&gt;&amp;quot;Ответ не JSON&amp;quot;. &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;b45l&quot;&gt;Как вы уже поняли, обработчика ошибки связанной с размером данных я не вставлял, так как в зависимости от сервера будет разная ошибка, поэтому вам нужно будет самому подстраиваться под ситуацию. На данный момент, если ошибки были, но они не отобразились (выключен display_startup_errors), то письмо тупо не будет отправляться. Конкретную причину мы, разумеется, не узнаем, но зато идиотского ответа, что это не JSON тоже не получим. Поэтому отключайте display_startup_errors (просите техподдержку это сделать) и пишите обработчик.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;GzdY&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;После всего, настоятельно рекомендую снова закомментировать строчку c &lt;em&gt;$mail-&amp;gt;SMTPDebug = 2&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;pRCg&quot;&gt;9. Скачать готовую форму&lt;/h2&gt;
  &lt;p id=&quot;FJl4&quot;&gt;-&amp;gt; &lt;a href=&quot;https://github.com/shpgn/phpm/releases/download/v0.1/phpmailer_form.zip&quot; target=&quot;_blank&quot;&gt;Скачать с Github&lt;/a&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;5rTp&quot;&gt;Внимание!&lt;/h2&gt;
  &lt;p id=&quot;WGH9&quot;&gt;Спасибо за внимание!&lt;/p&gt;

</content></entry><entry><id>shpagin:canon</id><link rel="alternate" type="text/html" href="https://teletype.in/@shpagin/canon?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=shpagin"></link><title>[БЕСПЛАТНО] CANON G1400 ОШИБКА 5B00 СБРОС ПАМПЕРСА</title><published>2022-10-11T18:37:44.306Z</published><updated>2022-10-11T19:22:13.069Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7c/25/7c251498-3a72-4acc-b4e8-1c8476e9dfe6.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/80/13/8013f238-80a9-48fd-ac0c-01f7c161d0c6.png&quot;&gt;Я проделывал это на принтере Canon G1400. Так же данная программа подойдёт под всю G-серию. Список поддерживаемых принтеров широк</summary><content type="html">
  &lt;figure id=&quot;yNWQ&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/13/8013f238-80a9-48fd-ac0c-01f7c161d0c6.png&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;avQy&quot;&gt;&lt;strong&gt;Я проделывал это на принтере Canon G1400. Так же данная программа подойдёт под всю G-серию. &lt;a href=&quot;#CPoA&quot;&gt;Список поддерживаемых принтеров широк&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Wdqq&quot;&gt;Инструкция&lt;/h2&gt;
  &lt;ol id=&quot;kZQm&quot;&gt;
    &lt;li id=&quot;zu6v&quot;&gt;Помещаем бумагу в принтер (более 2 листов)&lt;/li&gt;
    &lt;li id=&quot;0CvW&quot;&gt;Скачиваем программу &lt;a href=&quot;https://github.com/shpgn/service_tool_canon/releases/download/ServiceTool/ServiceTool_v4718.zip&quot; target=&quot;_blank&quot;&gt;ServiceTool_4718.zip&lt;/a&gt; пароль: 1&lt;/li&gt;
    &lt;li id=&quot;BNtw&quot;&gt;Переводим свой принтер в &lt;strong&gt;&lt;u&gt;&lt;a href=&quot;#xZhs&quot;&gt;сервисный режим.&lt;/a&gt;&lt;/u&gt;&lt;/strong&gt;&lt;em&gt;Инструкция для Canon G1400 под картинкой&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;FK2d&quot;&gt;Запускаем программу, смотрим на Азазина и жмём Accept&lt;/li&gt;
    &lt;li id=&quot;Yan8&quot;&gt;Нас интересует третий столбец (Canon). Жмём на START&lt;/li&gt;
    &lt;li id=&quot;3VSx&quot;&gt;Проверяем, чтобы настройки были такие же и жмём в этой последовательности что на рисунке. Первое EEPROM -&amp;gt; OK&lt;/li&gt;
    &lt;li id=&quot;rCu8&quot;&gt;Выключаете и включаете принтер. Всё.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;9jZM&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0d/6a/0d6a027e-a8cf-4e7a-bb15-9ad4fc3d39e4.jpeg&quot; width=&quot;651&quot; /&gt;
    &lt;figcaption&gt;Service Tool Canon&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;xZhs&quot;&gt;&lt;strong&gt;&lt;u&gt;Перевод Canon G1400 в сервисный режим:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
    &lt;ol id=&quot;mBam&quot;&gt;
      &lt;li id=&quot;rkgw&quot;&gt;На выключенном принтере зажимаем треугольник &lt;/li&gt;
      &lt;li id=&quot;19yD&quot;&gt;Зажимаем кнопку включения &lt;/li&gt;
      &lt;li id=&quot;0cBX&quot;&gt;Отпускаем треугольник и жмём на треугольник 5 раз (кнопка включения всё время зажата) &lt;/li&gt;
      &lt;li id=&quot;UXs7&quot;&gt;Отпускаем кнопку включения&lt;/li&gt;
      &lt;li id=&quot;W5Ag&quot;&gt;Принтер прогонит один лист бумаги&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;CPoA&quot;&gt;У меня новый принтер, где мне скачать новую версию программы?&lt;/h2&gt;
    &lt;p id=&quot;8q8u&quot;&gt;Актуальные версии программы вы можете скачать из моего репозитория на Github -&amp;gt; &lt;a href=&quot;https://github.com/shpgn/service_tool_canon&quot; target=&quot;_blank&quot;&gt;Service Tool Canon&lt;/a&gt;. Однако новее - не значит лучше. На мой G1400 не подошла версия v5103, а v4718 завелась без проблем. Так что:&lt;/p&gt;
    &lt;blockquote id=&quot;15TX&quot;&gt;&lt;em&gt;Ищите друг друга что бы ни было и ждите несмотря ни на что&lt;/em&gt;&lt;/blockquote&gt;
    &lt;p id=&quot;QwiO&quot;&gt;&lt;strong&gt;Список поддерживаемых принтеров&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;OTi1&quot;&gt;G1000, G1100, G1400, G1900, G2000, G2100, G2400, G2700, G2900, G3000, G3100, G3400, G3900, G4000, G4100, G4200, G4400, G4500, G4600, G4800, G4900, E410, E414, E417, E418 E460, E460, E461 ,E464, E468, E470, E471, E477, E478, E480, E481, E484, E488, E489, IB4010, IB4020,IB4040, IB4050, IB4060,IB4070, IB4080,IB4090, IB4110, IB4120, IB4140, IB4150, IB4160,IB4170, IB4180,IB4190, IP7240, IP110, IP8740, IP2870S, IP2880S, IX6810, IX6840, MB2100, MB2700, MB5100, MB5400, Mb5310, Mb2010, Mb2110, MG2570S, MG2580S, MG3000, MG3010, MG3020, MG3022, MG3040, MG3050, MG3051, MG3052, MG3053, MG3060, MG3070, MG3077, MG3070S, MG3077S, MG3080, MG3090 MG3600, MG6700, MG6800, MG6930 MG7700, MG5540, MG5640, MG5650, MG5740, MG6840, MX534, MX924, MX470, MX471, MX472, MX474, MX475, MX476, MX477, MX478 MX490, MX491, MX492, MX494, MX495, MX496, MX497, MX498, MX499&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Zwnq&quot;&gt;Мысли в слух&lt;/h2&gt;
  &lt;p id=&quot;XrcR&quot;&gt;Я, когда узнал, что в принтере есть какой-то памперс и его нужно сбрасывать, был немного удивлён. Ещё в большем ах*е я был, когда узнал, что за это нужно платить. И если гуглить в русскоязычном Гугле/Яндексе, то ты будешь нарываться только на одно и тоже: ПРОГРАММА ПpинтXeлп, которая, сука, предлагает КУПИТЬ КОД для сброса! Вы серьёзно? Купить? Я уже купил принтер! Какой нах*й код? Самое тупое, что все пути ведут именно на эту программу. Что бы ты не гуглил — придёшь всё равно к ней. Сразу появляется вопрос: Вы кто такие? Почему я должен вам платить?&lt;/p&gt;
  &lt;figure id=&quot;mZAo&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/82/7482dda1-3af2-44a2-b582-9b1c26a0234c.jpeg&quot; width=&quot;1074&quot; /&gt;
    &lt;figcaption&gt;идите на*уй&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;002f&quot;&gt;Особенно у меня пригорает ж*па от людей на форумах, которые хвалят разработчиков этой программы: «Вот ребята молодцы, сделали такую хорошую программу. БУДУ ПОДДЕРЖИВАТЬ ОТЕЧЕСТВЕННЫХ РАЗРАБОТЧИКОВ». &lt;strong&gt;Ё* вашу мать! &lt;/strong&gt;Вы долбанулись? Я, когда всё это читаю, ощущаю себя в «Городе Зеро», где все кругом поехавшие и всех всё устраивает. Серьёзно? Платить кому-то, чтоб твой &lt;strong&gt;УЖЕ КУПЛЕННЫЙ&lt;/strong&gt; принтер работал? И ещё эти комментарии, где пишут, что единственное решение — это только их программа, а ЕСЛИ ВЫ БУДЕТЕ ИСПОЛЬЗОВАТЬ ДРУГУЮ, ТО ВЫ ПРОСТО УБЬЁТЕ ПРИНТЕР. Единственное оправдание для моей и так уже висящей на волоске психике — это то, что ВСЕ ЗАПИСИ НА ВСЕХ САЙТАХ делает SEO этой программы. Знаете, как на вирусных фейковых сайтах МайлОтветы, где кто-то задаёт вопрос -&amp;gt; кто-то кидает ссылку на программу -&amp;gt; все начинают поддакивать и говорить&lt;em&gt; «хорошая программа. помогла. только нужно ввести номер и тебе придёт смс»&lt;/em&gt;. Ну и потом у тебя деньги списываются. Вот такое чувство, что ПpинтXeлп по той же схеме свою программу распространяет.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;mMyk&quot;&gt;Внимание!&lt;/h2&gt;
  &lt;p id=&quot;4ceb&quot;&gt;&lt;strong&gt;Спасибо за внимание&lt;/strong&gt;&lt;/p&gt;

</content></entry></feed>