{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Skurudo Blog(post): заметки с тегом почта",
    "_rss_description": "По́чта (рус. Почта (инф.); от итал. posta) — термин, используемый для обозначения",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/skurudo.ru\/tags\/mail\/",
    "feed_url": "https:\/\/skurudo.ru\/tags\/mail\/json\/",
    "icon": "https:\/\/skurudo.ru\/pictures\/userpic\/userpic@2x.jpg?1691593083",
    "authors": [
        {
            "name": "Pavel Galkin",
            "url": "https:\/\/skurudo.ru\/",
            "avatar": "https:\/\/skurudo.ru\/pictures\/userpic\/userpic@2x.jpg?1691593083"
        }
    ],
    "items": [
        {
            "id": "227",
            "url": "https:\/\/skurudo.ru\/all\/import-users-to-yandex-connect\/",
            "title": "Импорт пользователей в Яндекс.Коннект через API",
            "content_html": "<p>Возникла задача добавить несколько десятков пользователей в Яндекс.Коннект и сразу же начались поиски пути решения, чтобы избавиться от ручного труда и в дальнейшем облегчить жизнь. Решил попробовать вариант от <a href=\"https:\/\/habr.com\/ru\/users\/Energys\/\">Energys<\/a> — статья на <a href=\"https:\/\/habr.com\/ru\/post\/448036\/\">habr’e<\/a>. Почему попробовать? За пару лет что-то могло перестать работать, как говорится — «За время пути собака могла подрасти!»<\/p>\n<p>С первого взгляда не понравилось то, что пароли у сотрудников будущих одинаковые — это обязательно нужно было поменять, плюс не указана должность — потребовалось добавить. Однако для общего понимания статья подходит как нельзя лучше. К тому же изменения сравнительно не сложные — готовимся и применяем.<\/p>\n<p>Самое не простое в этой истории — возня с токеном от Яндекса. В статье она описана, пройдем по шагам для истории и чтобы ничего не забыть:<\/p>\n<ul>\n<li>* зайти в аккаунт яндекса под администратором домена;<\/li>\n<li>* в <a href=\"https:\/\/oauth.yandex.ru\/\">Я.OAuth<\/a> первым делом нужно создать приложение;<\/li>\n<li>* приложению даем права, в нашем случае — Яндекс.Коннект Directory API;<\/li>\n<li>* выбираем платформу «веб-сервисы» и нажимаем «подставить url для разработки»;<\/li>\n<li>* сохраняемся и получим ID приложения — именно оно понадобится для получения токене;<\/li>\n<li>* вставляем ID приложения и получаем токен:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/oauth.yandex.ru\/authorize?response_type=token&amp;client_id=&lt;ID приложения&gt;<\/code><\/pre><ul>\n<li>* именно этот токен и будет использоваться в скрипте;<\/li>\n<\/ul>\n<p>Идея сравнительно не сложная:<\/p>\n<ol start=\"1\">\n<li>готовим файл определенного образца;<\/li>\n<li>добавляем переменных;<\/li>\n<li>читаем список из файла;<\/li>\n<li>в запросе в цикле добавляем переменные;<\/li>\n<li>в каждой итерации ждем пару секунд.<\/li>\n<\/ol>\n<p>Сам скрипт выглядит следующим образом — он же на <a href=\"https:\/\/github.com\/skurudo\/usefulbash\/blob\/main\/yandex-connect-mass-user-add.sh\">GitHub<\/a>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\r\n# path to users list - путь к списку пользователей\r\nemployees=&#039;.\/usrlist&#039;\r\n# line example from users list - пример строки файла \r\n# usrlist: email_lastname_firstname_middlename_password_position\r\n# for example: petrova_Петрова_Авдотья_Федоровна_eeKrutoiparol23_Менеджер\r\n\r\n# OAuth_Token\r\n# link to material about token - ссылка на формирование отладочного токена\r\n# https:\/\/tech.yandex.ru\/oauth\/doc\/dg\/tasks\/get-oauth-token-docpage\/\r\n# link about our apps - список ваших приложений\r\n# https:\/\/oauth.yandex.ru\/\r\n# get token from apps id - получить токен из ID приложения\r\n# https:\/\/oauth.yandex.ru\/verification_code#access_token=435843755894374389\r\nTOKEN=&quot;token-here-and-there&quot;\r\n\r\n# read and trim user file - читаем и перебираем файл со списком пользователей\r\nfor i in $( cat $employees ); do\r\nvalue=($(echo $i | tr &quot;_&quot; &quot; &quot;))\r\n\r\n# make variables for api request from file - заводим переменные для запроса из файла\r\nemail=&quot;${value[0]}&quot;\r\nlastname=&quot;${value[1]}&quot;\r\nfirstname=&quot;${value[2]}&quot;\r\nmiddlename=&quot;${value[3]}&quot;\r\npassword=&quot;${value[4]}&quot;\r\nposition=&quot;${value[5]}&quot;\r\n\r\n# Make user for good - создаем сотрудника ради добра\r\n# department = 1 for default - департамент 1 умолчанию\r\n#only http answers, not full - только http ответы, не полный лог\r\ncurl -i -X POST -H &#039;Content-type: application\/json&#039; -d &#039;{&quot;department_id&quot;: 1, &quot;position&quot;: &quot;&#039;$position&#039;&quot;, &quot;password&quot;: &quot;&#039;$password&#039;&quot;, &quot;nickname&quot;: &quot;&#039;$email&#039;&quot;, &quot;name&quot;: {&quot;first&quot;: &quot;&#039;$firstname&#039;&quot;, &quot;last&quot;: &quot;&#039;$lastname&#039;&quot;, &quot;middle&quot;: &quot;&#039;$middlename&#039;&quot;}}&#039; -H &quot;Authorization: OAuth $TOKEN&quot; &#039;https:\/\/api.directory.yandex.net\/v6\/users\/&#039; | grep HTTP\r\n#full answers - полные ответы\r\n#curl -i -X POST -H &#039;Content-type: application\/json&#039; -d &#039;{&quot;department_id&quot;: 1, &quot;position&quot;: &quot;&#039;$position&#039;&quot;, &quot;password&quot;: &quot;&#039;$password&#039;&quot;, &quot;nickname&quot;: &quot;&#039;$email&#039;&quot;, &quot;name&quot;: {&quot;first&quot;: &quot;&#039;$firstname&#039;&quot;, &quot;last&quot;: &quot;&#039;$lastname&#039;&quot;, &quot;middle&quot;: &quot;&#039;$middlename&#039;&quot;}}&#039; -H &quot;Authorization: OAuth $TOKEN&quot; &#039;https:\/\/api.directory.yandex.net\/v6\/users\/&#039; \r\n# wait for 2 sec - ждем пару секунд\r\nwait 2\r\ndone<\/code><\/pre><p>C чем удалось столкнуться при отладке и работе скрипта? Буквально несколько моментов:<\/p>\n<ul>\n<li>* если посылать запросы слишком часто, часть может не сработать — нужно подбирать тайминги между запросами.. пауза в 1-2 секунды работает;<\/li>\n<li>* обязательно нужно смотреть на входные данные — аккуратность с символами в названиях важна;<\/li>\n<li>* моя частая ошибка — 422 Unprocessable Entity — при разборе оказалось, что пароль был слишком простой;<\/li>\n<\/ul>\n",
            "date_published": "2021-03-04T15:00:15+03:00",
            "date_modified": "2021-05-21T10:15:44+03:00",
            "tags": [
                "api",
                "bash",
                "почта",
                "скрипт",
                "Яндекс"
            ],
            "_date_published_rfc2822": "Thu, 04 Mar 2021 15:00:15 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "227",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "157",
            "url": "https:\/\/skurudo.ru\/all\/mail-server-setting-memo\/",
            "title": "Памятка по настройкам почты",
            "content_html": "<p>Я просто оставлю здесь эту памятку для самопроверки по настройке почты:<\/p>\n<ul>\n<li>0. Корректная MX запись на ваш почтовый сервер.<\/li>\n<\/ul>\n<ul>\n<li>1. В конфигурации по доменам (\/home\/login\/conf\/web\/apache2.conf или \/home\/login\/conf\/web\/httpd.conf — внутри Directory) сделать корректную отправку с обратным адресом (желательно, чтобы этот адрес существовал):<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">php_admin_value sendmail_path &quot;\/usr\/sbin\/sendmail -t -i -f info@domain.ru&quot;<\/code><\/pre><ul>\n<li>2. Корректный PTR для вашего сервера (оно же обратная зона, обычно делается вашим провайдером)<\/li>\n<\/ul>\n<ul>\n<li>3. Корректный SFP (ip в качестве примера)<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">v=spf1 a mx ip4:192.168.0.1 ~all<\/code><\/pre><ul>\n<li>4. Если не используется IPv6, то разумнее его отключить. Одна строка в exim. (Если используется, то не забыть п.3 и п.2 для IPV6 адресов.)<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">disable_ipv6 = true<\/code><\/pre><ul>\n<li>5. Использовать корректный хостнейм, который резолвится (отзывается хоть как-нибудь), а также не забыть использовать резолвер для внешних ресурсов. Примеры:<br \/>\n\/etc\/hosts<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">127.0.0.1 localhost.localdomain localhost\r\n192.168.0.1 domain.ru        domain<\/code><\/pre><ul>\n<li>\/etc\/resolv.conf<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">nameserver 77.88.8.8\r\nnameserver 8.8.8.8\r\nnameserver 77.88.8.1\r\nnameserver 8.8.4.4<\/code><\/pre><p>====================================<\/p>\n<p>Проверьте, не в спамлистах ли вы:<\/p>\n<ul>\n<li><a href=\"https:\/\/mxtoolbox.com\/blacklists.aspx\">https:\/\/mxtoolbox.com\/blacklists.aspx<\/a><\/li>\n<li><a href=\"https:\/\/www.dnsbl.info\">https:\/\/www.dnsbl.info<\/a><\/li>\n<\/ul>\n",
            "date_published": "2016-10-01T23:59:02+03:00",
            "date_modified": "2016-10-02T00:07:39+03:00",
            "tags": [
                "почта",
                "сервер"
            ],
            "_date_published_rfc2822": "Sat, 01 Oct 2016 23:59:02 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "157",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "151",
            "url": "https:\/\/skurudo.ru\/all\/caring-robot\/",
            "title": "Заботливый робот",
            "content_html": "<p>Не смотря на то, что логотип робота нарисован на основе творения СоюзМультФильма, подобная забота приятна. Еще было бы очень в тему, предупредить перед отключением, а то логика как-то слегка теряется.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/skurudo.ru\/pictures\/2016-06-09_002.png\" width=\"590\" height=\"536\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2016-06-10T22:27:33+03:00",
            "date_modified": "2016-06-10T22:27:31+03:00",
            "tags": [
                "mos.ru",
                "почта",
                "рассылка",
                "робот"
            ],
            "image": "https:\/\/skurudo.ru\/pictures\/2016-06-09_002.png",
            "_date_published_rfc2822": "Fri, 10 Jun 2016 22:27:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "151",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/skurudo.ru\/pictures\/2016-06-09_002.png"
                ]
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}