<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Воронин: заметки с тегом imap</title>
<link>https://voronin.one/tags/imap/</link>
<description>воронин, voronin, it</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>воронин, voronin, it</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>скрипт для переноса электронной почты из одного ящика в другой</title>
<guid isPermaLink="false">39</guid>
<link>https://voronin.one/all/skript-dlya-perenosa-elektronnoy-pochty-iz-odnogo-yaschika-v-dru/</link>
<pubDate>Tue, 02 May 2023 18:04:04 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/skript-dlya-perenosa-elektronnoy-pochty-iz-odnogo-yaschika-v-dru/</comments>
<description>
&lt;p&gt;Скрипт максимально простой, написан на php, так же потребуется модуль php-imap, работает из командной строки любого устройства (сервера). Принцип простой, скрипт подключается к исходному ящику по протоколу IMAP сканирует структуру почтовых папок, подключается к целевому ящику IMAP, воссоздаёт папки которых нет и загружает в них письма. Опционально может создать структуру папок локально и скачать в них письма в формате eml.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php

//папка, куда будет сохраняться структура ящика с письмами
$path_to_mail = &amp;#039;boxes&amp;#039;;

//сохранять локально копию ящика
$save_local_copy = 0;

//декодировать имя папки или нет для локальной копии
$decode_folder_name = 1;

//данные ящика откуда переезжаем (например яндекс)
$source_server = &amp;#039;imap.yandex.ru&amp;#039;;
$source_port = &amp;#039;993&amp;#039;;
$source_user = &amp;#039;{user}@{domain}.ru&amp;#039;;
$source_pass = &amp;#039;P@$$word&amp;#039;;

//данные ящика куда переезжаем
$target_server = &amp;#039;mail.{domain}.ru&amp;#039;;
$target_port = &amp;#039;993&amp;#039;;
$target_user = &amp;#039;{user}@{domain}.ru&amp;#039;;
$target_pass = &amp;#039;P@$$word&amp;#039;;

function check_folder_exist($folders_list, $check_folder_name) {
  $fl_exist = false;
  foreach ($folders_list as $val) {
    if ($val-&amp;gt;name == $check_folder_name) {
      $fl_exist = true;
    }
  }
  return $fl_exist;
}

$path_to_mail .= DIRECTORY_SEPARATOR.$source_user.DIRECTORY_SEPARATOR;

$source_server_str = &amp;quot;{&amp;quot;.$source_server.&amp;quot;:&amp;quot;.$source_port.&amp;quot;/imap/ssl}&amp;quot;;
$source_mbox = imap_open($source_server_str,$source_user,$source_pass)
      or die(&amp;quot;can&amp;#039;t connect: &amp;quot; . imap_last_error());

$target_server_str = &amp;quot;{&amp;quot;.$target_server.&amp;quot;:&amp;quot;.$target_port.&amp;quot;/imap/ssl}&amp;quot;;
$target_mbox = imap_open($target_server_str,$target_user,$target_pass)
      or die(&amp;quot;can&amp;#039;t connect: &amp;quot; . imap_last_error());

$target_list = imap_getmailboxes($target_mbox, $target_server_str, &amp;quot;*&amp;quot;);
if (is_array($target_list)) {
    foreach ($target_list as $key =&amp;gt; $val) {
      $folder_name = str_replace($target_server_str,&amp;#039;&amp;#039;,$val-&amp;gt;name);
      $target_delimiter = $val-&amp;gt;delimiter;
    }
} else {
    echo &amp;quot;imap_getmailboxes failed: &amp;quot;.imap_last_error().&amp;quot;\n&amp;quot;;
}

$source_list = imap_getmailboxes($source_mbox, $source_server_str, &amp;quot;*&amp;quot;);
if (is_array($source_list)) {
    foreach ($source_list as $key =&amp;gt; $val) {
        $source_full_folder_name = $val-&amp;gt;name;
        $source_delimiter = $val-&amp;gt;delimiter;
        $con=imap_open($source_full_folder_name, $source_user, $source_pass);
        $number_msg=imap_num_msg($con);
        $folder_name = str_replace($source_server_str,&amp;#039;&amp;#039;,$source_full_folder_name);
        if ($decode_folder_name) {
          $current_folder_name = mb_convert_encoding($folder_name, &amp;quot;UTF8&amp;quot;, &amp;quot;UTF7-IMAP&amp;quot;);
        } else {
          $current_folder_name = $folder_name;
        }
        $full_new_folder_name = $target_server_str.str_replace($source_delimiter,$target_delimiter,$folder_name);
        echo $full_new_folder_name.&amp;quot;\n&amp;quot;;
        if (!(check_folder_exist($target_list, $full_new_folder_name))) {
          echo &amp;#039;папка &amp;quot;&amp;#039;.mb_convert_encoding($folder_name, &amp;quot;UTF8&amp;quot;, &amp;quot;UTF7-IMAP&amp;quot;).&amp;#039;&amp;quot; отсутствует на сервере, создаём&amp;#039;.&amp;quot;\n&amp;quot;;
          
          imap_createmailbox($target_mbox, $full_new_folder_name);
        }
        if ((!file_exists($path_to_mail.str_replace($source_delimiter,DIRECTORY_SEPARATOR,$current_folder_name))) and ($save_local_copy)) {
            mkdir($path_to_mail.str_replace($source_delimiter,DIRECTORY_SEPARATOR,$current_folder_name), 0777, true);
        }
        echo mb_convert_encoding($folder_name, &amp;quot;UTF8&amp;quot;, &amp;quot;UTF7-IMAP&amp;quot;).&amp;quot;: &amp;quot;;
        echo $number_msg.&amp;quot;\n&amp;quot;;
        for ($i = 1; $i &amp;lt;= $number_msg; $i++) {
          if (!imap_ping($con)) {
              // если вдруг связь первалась, восстанавливаем
              echo &amp;quot;$i ой, reconnect $source_server\n&amp;quot;;
              $i--;
              $con=imap_open($val-&amp;gt;name, $source_user, $source_pass);
          }
          if (!imap_ping($target_mbox)) {
              // если вдруг связь первалась, восстанавливаем
              echo &amp;quot;$i ой, reconnect $target_server\n&amp;quot;;
              $target_mbox = imap_open($target_server_str,$target_user,$target_pass);
          }
          echo &amp;quot;.&amp;quot;;
          $headers = imap_fetchheader($con, $i, FT_PREFETCHTEXT);
          $body = imap_body($con, $i);
          imap_append($target_mbox, $full_new_folder_name, $headers.&amp;quot;\n\n&amp;quot;.$body,&amp;quot;\\Seen&amp;quot;);
          if ($save_local_copy) {
            file_put_contents($path_to_mail.str_replace($val-&amp;gt;delimiter,DIRECTORY_SEPARATOR,$current_folder_name).DIRECTORY_SEPARATOR.str_pad($i, 8, &amp;quot;0&amp;quot;, STR_PAD_LEFT).&amp;quot;.eml&amp;quot;, $headers.&amp;quot;\n\n&amp;quot;.$body);
          }
        }
        echo &amp;quot;\n&amp;quot;;
      imap_close($con);
    }
} else {
    echo &amp;quot;imap_getmailboxes failed: &amp;quot;.imap_last_error().&amp;quot;\n&amp;quot;;
}
imap_close($source_mbox);
imap_close($target_mbox);

?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;$path_to_mail — относительный путь к папке, где будет храниться локальная копия ящика, актуально когда «$save_local_copy = 1»&lt;/p&gt;
&lt;p&gt;$save_local_copy = 1 будет сохраняться локальная копия писем на жёстком диске, соответственно, если «0» — не будет&lt;/p&gt;
&lt;p&gt;$decode_folder_name = 1 имена папок будут декодированы в нормальный вид, если «0» — то будет использован формат UTF7, как они хранятся на сервере.&lt;/p&gt;
&lt;p&gt;Все письма, которые будут перенесены в новый ящик получат статус прочитанных, извините, я не заморачивался с перенесением флагов.&lt;/p&gt;
&lt;p&gt;Перед прочтением сообщения пингуется соединение с сервером IMAP, в случае его обрыва — соединение восстанавливается. Замедление совсем небольшое, зато надёжность вырастает многократно.&lt;/p&gt;
&lt;p&gt;Учитываются разделители вложенности папок (например у яндекса это «|», в iRedMail «/»).&lt;/p&gt;
&lt;p&gt;Копирование писем допускается один раз, если вы прервёте процесс и запустите снова, часть сообщений задублируется.&lt;/p&gt;
</description>
</item>

<item>
<title>автоматизируем очистку почтового ящика по-расписанию</title>
<guid isPermaLink="false">33</guid>
<link>https://voronin.one/all/avtomatiziruem-ochistku-pochtovogo-yaschika-po-raspisaniyu/</link>
<pubDate>Thu, 08 Sep 2022 17:13:44 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/avtomatiziruem-ochistku-pochtovogo-yaschika-po-raspisaniyu/</comments>
<description>
&lt;p&gt;собственно subj, на примере яндекса&lt;/p&gt;
&lt;p&gt;я хочу удалять с сервера старые письма (старше недели) с уведомлениями, которые у меня накапливаются в отдельной папке&lt;/p&gt;
&lt;p&gt;для начала идём в настройки безопасности &lt;a href="https://id.yandex.ru/security"&gt;https://id.yandex.ru/security&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-23.png" width="625" height="323" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;выбираем «Пароли приложений» &lt;a href="https://id.yandex.ru/profile/apppasswords-list"&gt;https://id.yandex.ru/profile/apppasswords-list&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;и создаем новый пароль для приложения, нам требуется сгенерить пароль для доступа к Почте, указываем понятное нам название и генерим пароль&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-25.png" width="668" height="395" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;на самом деле — это очень правильно, т. к. мы не будем хранить в ком-то скрипте свой основной пароль в открытом виде&lt;/p&gt;
&lt;p&gt;а дальше, собственно, сам скрипт&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php
$auth_mail = &amp;#039;user@yandex.ru&amp;#039;; // логин
$auth_pass = &amp;#039;$tr0ngP@$$w0rd&amp;#039;; // пароль
$server = &amp;#039;{imap.yandex.ru:993/imap/ssl}&amp;#039;.&amp;#039;INBOX&amp;#039;; // подключение к серверу к папке входящие
$filter_str = &amp;#039;BEFORE &amp;quot;&amp;#039;.date(&amp;#039;d-M-Y&amp;#039;, strtotime(&amp;#039;-7 days&amp;#039;)).&amp;#039;&amp;quot;&amp;#039;; // фильтр, чтобы получить письма старше 7 дней

$imap = imap_open($server, $auth_mail, $auth_pass) or die(&amp;quot;Не удалось подключиться: &amp;quot;.imap_last_error());
// подключаемся
$some = imap_search($imap, $filter_str);
// применяем фильтр
if ($some !== false) {
// если что-то нашли - в цикле обходим
foreach ($some as $msg_id)
{ //  и помечаем на удаление каждое письмо с его id
echo &amp;quot;delete message #&amp;quot;.$msg_id.&amp;quot;\n&amp;quot;;
imap_delete($imap, $msg_id);
}
}
// окончательно удаляем отмеченные письма и отключаемся
imap_expunge($imap);
imap_close($imap);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;обратите внимание, я в переменную «$server» добавил строку из двух частей, вторая чать в примере подключит вас к папке «Входящие», если вам надо выбрать другую папку — укажите свой путь, например:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;INBOX|&amp;BCEEPgRGBEEENQRCBDg-&lt;/b&gt; — это папка &lt;b&gt;Входящие — Соцсети&lt;/b&gt;, записанная в кодировке UTF7-IMAP&lt;/p&gt;
&lt;p&gt;список папок можно получить командой&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$list = imap_list($imap, &amp;quot;{imap.yandex.ru}&amp;quot;, &amp;quot;*&amp;quot;);
if (is_array($list)) {
foreach ($list as $val) {
echo mb_convert_encoding($val, &amp;quot;UTF-8&amp;quot;, &amp;quot;UTF7-IMAP&amp;quot;).&amp;quot;\n&amp;quot;;
echo $val.&amp;quot;\n\n&amp;quot;;
}
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;первой строкой будет выводится декодированное (читабельное) название, второй строкой исходное, которое и надо будет подставлять в свой скрипт выше&lt;/p&gt;
</description>
</item>

<item>
<title>2 часть, «анализ, получение исходных данных»</title>
<guid isPermaLink="false">2</guid>
<link>https://voronin.one/all/analiz-poluchenie-ishodnyh-dannyh/</link>
<pubDate>Fri, 24 Sep 2021 12:30:50 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/analiz-poluchenie-ishodnyh-dannyh/</comments>
<description>
&lt;p&gt;&lt;a href="https://voronin.one/all/kak-nelzya-otnositsya-k-korporativnym-klientam/"&gt;1 часть, «как нельзя относиться к корпоративным клиентам»&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Всегда начинайте со сбора информации, это важно! Исходные данные определят направление и общую схему работы вашего решения.&lt;/p&gt;
&lt;p&gt;Любая задача решается по принципу «от общего к частному».&lt;/p&gt;
&lt;p&gt;давайте рассмотрим алгоритм действия администратора:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;регистрация пользователя на сайте graphisoft.com&lt;/li&gt;
&lt;li&gt;подтверждение регистрации в посте пользователя&lt;/li&gt;
&lt;li&gt;авторизация на сайте graphisoft.com под административной учетной записью&lt;/li&gt;
&lt;li&gt;отправка приглашения пользователю&lt;/li&gt;
&lt;li&gt;авторизация  на сайте graphisoft.com под пользовательской учетной записью&lt;/li&gt;
&lt;li&gt;подтверждение приглашения&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/izobrazhenie_2021-09-24_111857.png" width="300" height="179" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Вроде, не сложно...  да и в процессе тестовой регистрации я не заметил использования captcha. Это очень важно, иначе полная автоматизация была бы невозможна.&lt;/p&gt;
&lt;p&gt;Какие данные нам нужны, чтобы проделать весь вышеописанный алгоритм?&lt;br /&gt;
данные пользователя:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;имя&lt;/li&gt;
&lt;li&gt;фамилия&lt;/li&gt;
&lt;li&gt;e-mail&lt;/li&gt;
&lt;li&gt;пароль (пароль будем генерировать с учетом требований безопасности graphisoft)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;данные администратора:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;e-mail&lt;/li&gt;
&lt;li&gt;пароль&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/izobrazhenie_2021-09-24_112041.png" width="300" height="236" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Осталось выбрать инструмент для реализации задуманного, я решил остановиться на php, т. к. у нас уже есть некий фундамент автоматизации рутинных процессов, который имеет web интерфейс и уже написан на php. В качестве хранилища информации выступит база MariaDB 10.&lt;/p&gt;
&lt;p&gt;Использовать будем curl, это «наше всё» для работы с web серверами.&lt;/p&gt;
&lt;p&gt;Начнем аккуратно, тут спешка не нужна, будем максимально повторять действия пользователя:&lt;br /&gt;
для начала откроем главную страницу и сохраним все cookies. Они будут, при первом открытии сайта вам сразу предложат принять cookie.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/izobrazhenie_2021-09-24_120651.png" width="677" height="142" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;файл для хранения cookie так и назовём «cookie.txt»&lt;/p&gt;
&lt;p&gt;очень удобно в браузере копировать все необходимые ключи для curl сразу в буфер обмена&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/izobrazhenie_2021-09-24_121005.png" width="767" height="557" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;curl &amp;#039;https://graphisoftid.graphisoft.com/&amp;#039; \
  -H &amp;#039;Connection: keep-alive&amp;#039; \
  -H &amp;#039;sec-ch-ua: &amp;quot; Not;A Brand&amp;quot;;v=&amp;quot;99&amp;quot;, &amp;quot;Opera&amp;quot;;v=&amp;quot;79&amp;quot;, &amp;quot;Chromium&amp;quot;;v=&amp;quot;93&amp;quot;&amp;#039; \
  -H &amp;#039;sec-ch-ua-mobile: ?0&amp;#039; \
  -H &amp;#039;sec-ch-ua-platform: &amp;quot;Windows&amp;quot;&amp;#039; \
  -H &amp;#039;DNT: 1&amp;#039; \
  -H &amp;#039;Upgrade-Insecure-Requests: 1&amp;#039; \
  -H &amp;#039;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 OPR/79.0.4143.50&amp;#039; \
  -H &amp;#039;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9&amp;#039; \
  -H &amp;#039;Sec-Fetch-Site: none&amp;#039; \
  -H &amp;#039;Sec-Fetch-Mode: navigate&amp;#039; \
  -H &amp;#039;Sec-Fetch-User: ?1&amp;#039; \
  -H &amp;#039;Sec-Fetch-Dest: document&amp;#039; \
  -H &amp;#039;Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&amp;#039; \
  --compressed&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;для ленивых предлагаю воспользоваться online сервисом &lt;a href="https://incarnate.github.io/curl-to-php/"&gt;https://incarnate.github.io/curl-to-php/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Сконвертируем ключи командной строки curl в код php и получим следующее:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, &amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &amp;#039;GET&amp;#039;);

curl_setopt($ch, CURLOPT_ENCODING, &amp;#039;gzip, deflate&amp;#039;);

$headers = array();
$headers[] = &amp;#039;Connection: keep-alive&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua: \&amp;quot; Not;A Brand\&amp;quot;;v=\&amp;quot;99\&amp;quot;, \&amp;quot;Opera\&amp;quot;;v=\&amp;quot;79\&amp;quot;, \&amp;quot;Chromium\&amp;quot;;v=\&amp;quot;93\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Mobile: ?0&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Platform: \&amp;quot;Windows\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Dnt: 1&amp;#039;;
$headers[] = &amp;#039;Upgrade-Insecure-Requests: 1&amp;#039;;
$headers[] = &amp;#039;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 OPR/79.0.4143.50&amp;#039;;
$headers[] = &amp;#039;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Site: none&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Mode: navigate&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-User: ?1&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Dest: document&amp;#039;;
$headers[] = &amp;#039;Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&amp;#039;;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo &amp;#039;Error:&amp;#039; . curl_error($ch);
}
curl_close($ch);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;осталось рассмотреть механизм php работы с почтовым ящиком, нам нужен по сути только механизм IMAP, не буду вас сильно грузить, оставлю готовый скрипт, который открывает почтовый ящик пользователя в режиме readonly и находит последнее письмо (если их несколько) от «register-noreply@graphisoft.com», расшифровывает тело письма и вытаскивает код подтверждения. Результатом работы скрипта будет ссылка на подтверждение регистрации или ничего, если письма не было.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php

$auth_mail = &amp;#039;username@mail.com&amp;#039;;
$auth_pass = &amp;#039;P@$$woRd&amp;#039;;

function get_string_between($string, $start, $end){
    $string = &amp;#039; &amp;#039; . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return &amp;#039;&amp;#039;;
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

$imap   = imap_open(&amp;#039;{imap.mail.com:993/imap/ssl}INBOX&amp;#039;, $auth_mail, $auth_pass, OP_READONLY);
if ($imap) {
$some = imap_search($imap, &amp;#039;FROM &amp;quot;register-noreply@graphisoft.com&amp;quot;&amp;#039;, SE_UID);
if (count($some)&amp;gt;0) {
$mail_body = base64_decode(imap_body($imap, $some[0]));
$key = get_string_between($mail_body,&amp;#039;&amp;lt;span style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/span&amp;gt;&amp;#039;);
echo &amp;#039;https://graphisoftid.graphisoft.com/#/verification/&amp;#039;.$key.&amp;quot;\n&amp;quot;;
}
}
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Вроде, все попробовали, ко всему готовы... В процессе реализации обязательно что-то всплывёт... но, в целом мы готовы!&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/izobrazhenie_2021-09-24_122739.png" width="300" height="230" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://voronin.one/all/kropotlivaya-rabota-i-dolgozhdanny-uspeh/"&gt;3 часть, «кропотливая работа и долгожданный успех»&lt;/a&gt;&lt;/p&gt;
</description>
</item>


</channel>
</rss>