NetPeak Biz Tech    


Как настроить отправку писем с помощью языка R

Как настроить отправку писем с помощью языка R

< >

Как настроить запуск R-скрипта по расписанию? Хотите оперативно и своевременно узнавать о сбоях в работе скриптов R? Достаточно настроить оповещения на email. В этой статье я опишу, как настроить рассылку с помощью языка R и как избежать подводных камней.

Что можно отправлять в письмах:

  • отчеты по результату работы скрипта на свою почту или по списку конкретных email-адресов;
  • сообщения об ошибках, которые возникли в работе скриптов;
  • файлы с локального диска, например, фотографию или CSV-документ.

Чтобы настроить отправку писем, потребуется:

Как выбрать пакет R для отправки email?

Для отправки писем существует несколько пакетов. При выборе подходящего учитывайте:

  • нужна ли аутентификация в почтовом сервисе;
  • пользователям каких почтовых ящиков будете отправлять сообщения.

Рассмотрим подробнее плюсы и минусы пакетов «sendmailR» и «mailR».

1. Пакет «sendmailR»

Этот пакет не поддерживает процедуру аутентификации, а значит, можно отправлять письма не из всех почтовых сервисов. Более того, сервисы, позволяющие рассылать письма без аутентификации, накладывают определенные ограничения. К примеру, SMTP сервер для Gmail (ASPMX.L.GOOGLE.COM) не требует аутентификации, но отправлять сообщения можно только пользователям Gmail или G Suite.

Преимущество «sendmailR» в том, что этот пакет достаточно прост в установке, не требуется дополнительное программное обеспечение.

2. Пакет «mailR»

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

Сложности могут возникнуть в связи с тем, что для работы пакета требуется установка Java.

Если нужно провести рассылку исключительно по пользователям Gmail или G Suite и при этом аутентификация необязательна — без особых раздумий пользуйтесь пакетом «sendmailR», в противном случае — выбирайте «mailR».

Как установить пакет «sendmailR»?

1. Для установки пакета откройте RStudio и в области «Source» вставьте код:

#Установка пакетаinstall.packages(\"sendmailR\")#Подключение пакетаlibrary(sendmailR)

Если вы впервые запустили RStudio, воспользуйтесь сочетанием клавиш «Ctrl+«Alt+Shift+0», чтобы появилась панель «Source».

2. Чтобы настроить отправку писем, подставьте ваши данные в код ниже:

from = \"\"to = c(\"\", \"\")subject <- “My first test letter”body <- (“It`s my first letter from R by sendmailR package!” , mime_part(iris))sendmail(from=from,to=to,subject=subject, msg=body,control=list(smtpServer=\"ASPMX.L.GOOGLE.COM\"))

 

2.1. Вместо «sender@gmail.com» впишите адрес своей Gmail-почты, вместо «recipient1@gmail.com» и «recipient2@gmail.com» — адреса получателей. Помните, что с SMTP сервера ASPMX.L.GOOGLE.COM можно рассылать письма только пользователям Gmail и G Suite,

2.2. В «subject» впишите тему письма,

2.3. Объект «body» содержит тело письма. В теле письма может быть не только текст («It`s my first letter from R by sendmailR package!»), но и вложения, например, встроенная R-таблица «iris».

2.4. Комaнда «sendmail» отправляет письмо. При проверке почты в первую очередь посмотрите папку «Спам»: из-за того, что вы отправили email без аутентификации и предварительно не настроили фильтр на почте, письмо сначала, скорее всего, попадет в спам.

Как установить пакет «mailR»?

1. Скачайте и установите версию Java, соответствующую разрядности на вашем компьютере.

Для 32-разрядной операционной системы скачайте Java по ссылке.

Если у вас 64-разрядная ОС, рекомендую скачать нужную версию из стороннего ресурса. На официальном сайте указано, что 64-битную Java можно скачать только через 64-разрядную версию браузера — я пробовал этот способ и не получил нужный результат.

2. Далее нужно установить пакеты «rJava» и «mailR»:

#Установка пакетаinstall.packages(\"rJava\")install.packages(\"mailR\")#Подключение пакетаlibrary(mailR)

При запуске кода может появиться следующая ошибка:

Error: .onLoad failed in loadNamespace() for \\\'rJava\\\', details: call: fun(libname, pkgname) error: JAVA_HOME cannot be determined from the Registry

Рассмотрим возможные причины:

2.1. Разрядность установленной Java не соответствует текущей версии Windows. Обычно подобная ошибка возникает, если у вас 64-разрядная ОС.

Как определить, какую версию Java вы используете? Проверьте системный диск Windows: для установки программного обеспечения по умолчанию используются две папки, расположенные в корне системного диска. Если папка «Java» появилась в «Program Files» — это 64-разрядная версия, а если в папке «Program Files (x86)» — 32-разрядная.

2.2. Вторая причина ошибки: в R не прописана или неверно прописана опция «JAVA_HOME». Чтобы устранить ошибку, запустите в R комaнды:

    • для 32-разрядной ОС:
Sys.setenv(JAVA_HOME=\\\'C:\Program Files (x86)\Java\jre1.8.0_102\\\')
    • для 64-разрядной ОС:
Sys.setenv(JAVA_HOME=\\\'C:\Program Files\Java\jre1.8.0_102\\\')

 

Перед запуском комaнды замените «jre1.8.0_102» на название файла Java, установленного на вашем компьютере. Файл можно найти в одноименной папке «Java», о которой я упоминал в предыдущем пункте. 

3. Далее нужно определить, требует ли ваш SMTP-сервер прохождения аутентификации, и в зависимости от этого выбрать подходящий код для отправки писем.

3.1. Для отправки писем без процедуры аутентификации в код подставьте данные:

  • тема и тело письма;
  • отправитель и получатели;
  • параметры SMTP-сервера.
library(mailR)send.mail(from = \"sender@gmail.com\", to = c(\"Recipient 1 \", \"recipient2@gmail.com\"), cc = c(\"CC Recipient \"), bcc = c(\"BCC Recipient \"), subject = \"Subject of the email\", body = \"Body of the email\", smtp = list(host.name = \"aspmx.l.google.com\", port = 25), authenticate = FALSE, send = TRUE)

3.2. Чтобы отправить письмо через SMTP с прохождением аутентификации, используйте код: 

library(mailR)send.mail(from = \"sender@gmail.com\", to = c(\"recipient1@gmail.com\", \"Recipient 2 \"), replyTo = c(\"Reply to someone else \") subject = \"Subject of the email\", body = \"Body of the email\", smtp = list(host.name = \"smtp.gmail.com\", port = 465, user.name = \"gmail_username\", passwd = \"password\", ssl = TRUE), authenticate = TRUE, send = TRUE)

Аргумент «smtp» содержит все параметры SMTP сервера и в нем необходимо указать учетные данные. 

Как отправлять письма с текстом на русском языке? 

Если вы используете пакет «mailR» и хотите, чтобы ваши письма содержали в теме или теле кириллические символы, воспользуйтесь аргументом «encoding» и укажите кодировку «utf-8».

library(mailR)send.mail(from = \"Sender Name \", to = \"recipient@gmail.com\", subject = \"Тема тестового письма на русском языке.\", body = \"Русскоязычное тело письма!\", encoding = \"utf-8\", smtp = list(host.name = \"smtp.gmail.com\", port = 465, user.name = \"gmail_username\", passwd = \"password\", ssl = T), authenticate = TRUE, send = TRUE)

 

Для отправки русскоязычного текста с помощью пакета «sendmailR» необходимо предварительно дважды перекодировать этот текст в UTF-8.

library(sendmailR)from = \"\"to = c(\"\",\"\")subject <- iconv(iconv(\\\'Тема письма\\\',to = \"UTF-8\"),to = \"UTF-8\")body <- iconv(iconv(\\\'Тело письма\\\',to = \"UTF-8\"), to = \"UTF-8\")sendmail(from=from,to=to,subject=subject,msg=body, control=list(smtpServer=\"ASPMX.L.GOOGLE.COM\"))

Как отправлять письма в формате HTML?

Для отправки сообщений в HTML-формате с помощью пакета «mailR» достаточно воспользоваться аргументом «html»:

library(mailR)send.mail(from = \"sender@gmail.com\", to = c(\"recipient1@gmail.com\", \"recipient2@gmail.com\"), subject = \"Subject of the email\", body = \"<html>The apache logo - html>\", html = TRUE, smtp = list(host.name = \"smtp.gmail.com\", port = 465, user.name = \"gmail_username\", passwd = \"password\", ssl = TRUE), authenticate = TRUE, send = TRUE)

 

Для отправки письма в HTML-формате с помощью пакета «sendmailR» используйте такой код:

library(sendmailR)msg <- mime_part(\\\' <html xmlns=\"https://www.w3.org/1999/xhtml\"><head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/> <title>HTML demotitle> <style type=\"text/css\"> style>head><body><h1>HTML demoh1>body> html>\\\')msg[[\"headers\"]][[\"Content-Type\"]] <- \"text/html\"from = \"\"to = c(\"\",\"\")subject <- \"HTML test\"body <- list(msg)sendmail(from=from,to=to,subject=subject,msg=body, control=list(smtpServer=\"ASPMX.L.GOOGLE.COM\"))

Как отправить в теле письма HTML-таблицу?

Самый простой способ — использовать пакет «htmlTable». Приведу примеры преобразования встроенной в R-таблицы «iris» в HTML-формат и добавление ее в тело письма.

Код для пакета «mailR»:

iris_html <- htmlTable(iris)library(mailR)send.mail(from = \"sender@gmail.com\", to = c(\"recipient1@gmail.com\", \"recipient2@gmail.com\"), subject = \"Subject of the email\", body = iris_html, html = TRUE, smtp = list(host.name = \"smtp.gmail.com\", port = 465, user.name = \"gmail_username\", passwd = \"password\", ssl = TRUE), authenticate = TRUE, send = TRUE)

Пример для «sendmailR»:

library(sendmailR)iris_html <- htmlTable(iris)msg <- mime_part(paste0(\\\' <html xmlns=\"https://www.w3.org/1999/xhtml\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/> <title>HTML table demotitle> <style type=\"text/css\"> style> head> <body> <h1>My table irish1>\\\', iris_html ,\\\' body> html>\\\'))msg[[\"headers\"]][[\"Content-Type\"]] <- \"text/html\"from = \"\"to = c(\"\",\"\")subject <- \"HTML test\"body <- list(msg)sendmail(from=from,to=to,subject=subject,msg=body, control=list(smtpServer=\"ASPMX.L.GOOGLE.COM\"))

Так же легко преобразовать любую таблицу из R в HTML-формат и отправлять ее в письме.

Выводы

Как мы внедрили BI-аналитику в отделе контекстной рекламы Язык R достаточно мощный, чтобы автоматизировать пpaктически любой процесс работы с данными. Чтобы получать отчеты о работе скриптов или уведомления об ошибках, выберите подходящий пакет R и настройте рассылку.

  1. Пакет «sendmailR» прост в установке, но не поддерживает процедуру аутентификации, и вы сможете отправлять письма только пользователям Gmail или G Suite.
  2. Пакет «mailR» поддерживает аутентификацию, но в процессе его установки вам также придется инсталлировать Java.
  3. С помощью языка R можно настроить не только отправку простых текстовых сообщений, но и письма:
    • с текстом на кириллице;
    • в формате HTML;
    • с HTML-таблицей в теле.



Комментарии:

Как стать менеджером проектов в Netpeak

Программа знаний и умений, чтобы стать Project Manager в агентстве интернет-маркетинга...

12 07 2026 1:23:42

Как выбрать шрифт — инструкция для маркетологов

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

11 07 2026 2:31:39

Форматы рекламных объявлений в Facebook и Instagram

Форматы рекламных объявлений в Facebook и Instagram Гайд по рекламе для SMM-, PPC-специалистов, блогеров и владельцев бизнеса...

10 07 2026 3:45:29

Влияние ссылок из социалок на ранжирование в поисковиках

Влияние ссылок из социалок на ранжирование в поисковиках Выдержка из интервью Дэнни Салливаном с представителями компаний Google и Bing...

09 07 2026 11:21:30

Отзыв про курсы продвижения сайтов от Netpeak

Отзыв про курсы продвижения сайтов от Netpeak Виктория Игнатьева рассказала про опыт обучения на наших курсах....

08 07 2026 10:42:32

Как запустить R и R Studio в Google Cloud Platform

Как запустить R и R Studio в Google Cloud Platform Используем возможности Google Cloud Platform в работе с R...

07 07 2026 15:39:26

Что такое robots.txt и зачем вообще нужен индексный файл

У каждого сайта в топе есть страница, о существовании которой знают только роботы и... SEO-специалисты. Это robots.txt или индексный файл....

06 07 2026 19:49:31

Что такое вес страниц и на что он влияет

Что такое вес страниц и на что он влияет Вес страниц — один из факторов ранжирования в поисковых системах Google и Яндекс....

05 07 2026 8:35:20

Что нужно понимать в SEO-отчетах, чтобы оценить эффективность продвижения

Что нужно понимать в SEO-отчетах, чтобы оценить эффективность продвижения Всё об оценке эффективности SEO-продвижения с инструментами и рекомендациями...

04 07 2026 21:27:43

Контекст-стратегия: купил и полетел

Чтобы привлечь представителей малого и среднего бизнеса, мы разработали стратегии по контекстной рекламе. Это открывает двери агентства Netpeak проектам с самым скромным бюджетом...

03 07 2026 6:11:42

Как повысить продажи брендовых украшений на 8-е марта. Кейс Pandora

Как повысить продажи брендовых украшений на 8-е марта. Кейс Pandora Стратегия продвижения, благодаря которой удалось снизить стоимость заявки от покупателей. Рассказываем об особенностях проведения акций в нише. Узнать больше!...

02 07 2026 12:49:21

Кейс «Мой Город»: как мы за месяц подняли трафик из Facebook на 86%

Цель — трафик facebook. Делимся кейсом проекта «Мой город»....

01 07 2026 13:44:43

Самые распространенные SEO-ошибки

Самые распространенные SEO-ошибки В ТОПе ошибок — метатеги, разметка, заголовки h1-h6 и внутренние ссылочные факторы....

30 06 2026 15:50:55

Топ расширений Google Chrome для ASO-специалиста

Топ расширений Google Chrome для ASO-специалиста Chrome Extensions экономят время тех, кто продвигает мобильные приложения...

29 06 2026 8:50:16

Как прогнозировать трафик поисковых кампаний в Google Ads

Прогнозирование с помощью «Планировщика ключевых слов»....

28 06 2026 12:46:37

Обязательные элементы email-рассылки: проверьте свои письма на привлекательность

Четкая структура полноценного письма с примерами из рассылок крупных компаний: Aviasales, LinguaLeo, Rozetka, Yves Rocher, Pich Shop, Эльдорадо и другие....

27 06 2026 4:37:38

Как найти путь к 250 миллионам пользователей за рубежом — обзор возможностей Pinterest

Как найти путь к 250 миллионам пользователей за рубежом — обзор возможностей Pinterest в поисках нового источника трафика расскажем о Pinterest — современной поисковой сети c акцентом на визуальном контенте...

26 06 2026 12:10:26

25 фактов про Google Рекламу

Интересные факты про Google Рекламу перевел Сергeй Бахарь для читателей нашего блога....

25 06 2026 13:55:39

PPC на украинском. Как языковой закон влияет на контекстную рекламу

PPC на украинском. Как языковой закон влияет на контекстную рекламу Языковой закон требует, чтобы общение бизнеса с клиентами шло на украинском языке, если нет просьбы о другом приемлемом варианте. Что это означает для РРС, читайте дальше....

24 06 2026 18:17:43

Козотерапия, душанбэнгеры, халабуда от Rozetka и капля трэша: майская реклама

Козотерапия, душанбэнгеры, халабуда от Rozetka и капля трэша: майская реклама Чем радовала, удивляла и шокировала таргетированная реклама в социальных сетях...

23 06 2026 7:49:30

5 вопросов: нужно ли вам статейное продвижение

Наталья Воскобойникова из контент-студии WordFactory решила дать четкую хаpaктеристику потенциальному заказчику гостевых постов. Если хотя бы один ваш ответ на вопросы в этом посте отрицательный, стоит найти другие тактики продвижения своего проекта....

22 06 2026 2:25:53

Конкурент Shazam: искусственный интеллект распознает песни по насвистываниям и мычаниям

Конкурент Shazam: искусственный интеллект распознает песни по насвистываниям и мычаниям Как в Google Search можно найти мелодию по примерному напеву...

21 06 2026 22:52:43

Синдром самозванца. Откуда берется и как с ним можно справиться

Синдром самозванца. Откуда берется и как с ним можно справиться Все успешные люди немного сомневаются в своих достижениях и рефлексируют о большом количестве ошибок. Не ок, когда сомнения затягивают и разрушают самооценку, создают постоянное напряжение. Давайте разбираться с синдромом самозванца....

20 06 2026 16:39:10

Блокчейн, революция контент-маркетинга и cмepть автора

Блокчейн, революция контент-маркетинга и cмepть автора Контент-революция: искусственный интеллект для уникальных текстов с достоверной информацией и контент-платформы на блокчейне для сохранения авторского права. Читайте больше в статье!...

19 06 2026 8:37:46

Как выбрать нишу для информационного сайта

Узкие специализированные ниши и широкие, которые, как правило, уже заняты лидерами рынка — в каждой найдется место для онлайн-издания с полезным контентом. Узнать больше!...

18 06 2026 15:49:26

Как заказать эффективную рекламу у Instagram-блогеров за $15-30

Как заказать эффективную рекламу у Instagram-блогеров за $15-30 Обсуждаем, как попробовать инфлюенсер-маркетинг без особого бюджета...

17 06 2026 4:12:13

Как провести четкую онлайн-трaнcляцию — кейс конференции MozCon

Как провести четкую онлайн-трaнcляцию — кейс конференции MozCon Нужно организовать конференцию с участием многих пользователей? Этот пост будет полезен, если до важного ивента есть хотя бы несколько дней в запасе....

16 06 2026 11:30:56

10 SEO-требований к сайту

Советы и даже требования SEO-специалистов к разработчикам сайтов....

15 06 2026 0:19:19

Наука быть счастливым: бесплатный онлайн-курс от профессора из Йеля

Профессор психологии Йельского университета разработала курс по обретению счастья. Его прошли уже 3,5 млн человек...

14 06 2026 18:23:58

Скелеты в шкафу РСЯ: как эффективно построить рекламную кампанию?

Как создавать результативные кампании в Рекламной сети Яндекса...

13 06 2026 3:18:47

Канонический URL: как повысить рейтинг одинакового контента

Канонический URL: как повысить рейтинг одинакового контента Атрибут rel="canonical" помогает бороться с дублированием контента и обезопасить сайт от дублирования и копирования...

12 06 2026 1:22:25

Списки в Twitter: зачем составлять и как вынести пользу

Списки в Twitter: зачем составлять и как вынести пользу В Twitter удобно собрать список потенциальных клиентов, чтобы время от времени посматривать за их новостями...

11 06 2026 7:54:11

Как анализировать внешнюю ссылочную массу: обзор сервисов и программ

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

10 06 2026 23:36:28

Как бизнесу сэкономить на digital-услугах в кризис: 6 рабочих способов

Как бизнесу сэкономить на digital-услугах в кризис: 6 рабочих способов Разбираем на примерах коллабораций, подрядчиков из регионов и тендендерных площадок...

09 06 2026 3:17:18

Партнерство с Amazon — всё? Что делать после уменьшения партнерских выплат

Партнерство с Amazon — всё? Что делать после уменьшения партнерских выплат Amazon сократил комиссию для сайтов партнеров от 30% до 80% — что делать дальше? Мнение эксперта....

08 06 2026 8:42:19

Сколько стоил клик в Google Ads и Яндекс.Директ в Казахстане в первом квартале 2018 года

Сколько стоил клик в Google Ads и Яндекс.Директ в Казахстане в первом квартале 2018 года Какие регионы и тематики наиболее выгодно продвигать в каждом из представленных рекламных сервисов, где наибольшая доля мобильного трафика, и другая полезная статистика....

07 06 2026 5:53:51

Лучшие примеры ошибки 404

Лучшие примеры ошибки 404 Ошибка на странице 404 может выглядеть креативно. Страница не найдена и не может быть найдена, потому что она в розыске, утеряна, украдена ниндзей, путь заснежен и дороги дальше нет, а принцесса находится в другом замке. О чем это?...

06 06 2026 6:35:17

Как работать с аудиториями Google Ads в наблюдении

Давайте больше не будем сливать бюджет, выбирая неправильный параметр....

05 06 2026 16:18:26

Четыре полезных оповещения в Google ***ytics

Бывают случаи, когда код Google ***ytics перестает вообще собирать статистику. Чтобы выявить сбой вовремя, обязательно настройте эти оповещения....

04 06 2026 1:19:43

Массовые изменения в Google Ads Editor

При работе с рекламным аккаунтом приходится вносить много однотипных изменений. Рассказываем, как сделать это быстро....

03 06 2026 23:30:54

Рекламный кабинет в Facebook — пять фишек для упрощения работы

Рекламный кабинет в Facebook — пять фишек для упрощения работы Возможности для специалистов по рекламе в Facebook, о которых знают далеко не все. Подробности — тут....

02 06 2026 6:28:32

Как настроить расширенную электронную торговлю с помощью Google Tag Manager

Как настроить расширенную электронную торговлю с помощью Google Tag Manager Как GTM помогает настроить расширенную электронную торговлю (enhanced ecommerce)....

01 06 2026 3:35:22

Как запустить продукт на AppSumo в 2021 году и привлечь 2 000+ клиентов — личный опыт

Как запустить продукт на AppSumo в 2021 году и привлечь 2 000+ клиентов — личный опыт Зачем размещаться на AppSumo и как запустить продукт в 2021 году? Лайфхаки по размещению, личный опыт и результаты по проведенной кампании...

31 05 2026 4:16:33

Сколько стоил клик в Google Ads в первом квартале 2016 — исследование Netpeak

Сколько стоил клик в Google Ads в первом квартале 2016 — исследование Netpeak Мы решили узнать, как дорого обходятся рекламодателям клики по объявлениям в разных странах и тематиках, чтобы читателям блога было удобнее планировать бюджет на рекламные кампании....

30 05 2026 7:36:11

Об экономике контента

Об экономике контента Почему кого-то ругают за плохие тексты, а у кого-то из-за таких же текстов берет интервью Юрий Дудь? И другие особенности контента: авторское право, копирайтинг. Читать!...

29 05 2026 20:55:47

Как собрать аудиторию подписчиков YouTube с 0 до 10 000 за год — кейс канала магазина для любителей рыбалки

Как собрать аудиторию подписчиков YouTube с 0 до 10 000 за год — кейс канала магазина для любителей рыбалки Кейс продвижения YouTube-канала магазина товаров для рыбалки...

28 05 2026 7:17:18

Как работать с Яндекс.Вебвизор 2.0

Как работать с Яндекс.Вебвизор 2.0 Бета-версия помогает записывать действия пользователей на сайте и благодаря этому улучшать удобство использования сайта и в перспективе растить продажи. Узнать больше!...

27 05 2026 10:38:59

Визуализация данных с помощью DataDeck

Визуализация данных с помощью DataDeck Краш-тест сервиса визуализации данных: выбираем задачу, источники, создаём отчет с помощью DataDeck. Бонус в конце — лаконичные списки преимуществ и недостатков этого инструмента и приятный подарок для дочитавших...

26 05 2026 21:11:11

Очистка Twitter от ботов и спаммеров

Очистка Twitter от ботов и спаммеров Чтобы раскрутить себя в Твиттер иногда нужно чистить списки фолловеров и это намного проще, чем кажется :)...

25 05 2026 12:19:57

Трудности перевода: как найти общий язык с зарубежными SEO-специалистами

Трудности перевода: как найти общий язык с зарубежными SEO-специалистами Профессиональная лексика SEO-специалистов в буржунете и в рунете формируется в одном поле: Google-то общий. Но когда специалисты Востока и Запада встречаются, им сложно понять друг друга. Это неудивительно, так как язык отражает само восприятие SEO. А под...

24 05 2026 4:21:48

Еще:
понять и запомнить -1 :: понять и запомнить -2 :: понять и запомнить -3 :: понять и запомнить -4 :: понять и запомнить -5 :: понять и запомнить -6 :: понять и запомнить -7 ::