Чтение и отправка почты с помощью R | OTUS
🔥 Успейте получить скидку!
Только до 27.01 можно приобрести курсы со скидкой 25%. Торопитесь!
Выбрать курс

Курсы

Программирование
Разработчик программных роботов (RPA) на базе UiPath и PIX
-25%
Разработчик C#
-25%
Алгоритмы и структуры данных
-25%
Backend-разработчик на PHP
-25%
JavaScript Developer. Professional
-25%
Team Lead
-25%
Golang Developer. Professional
-25%
Agile Project Manager
-25%
Flutter Mobile Developer
-25%
Android Developer. Professional
-11%
MS SQL Server Developer
-8%
C++ Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Kotlin Backend Developer React.js Developer VOIP инженер Нереляционные базы данных Scala-разработчик Супер-практикум по использованию и настройке GIT IoT-разработчик JavaScript Developer. Basic Advanced Fullstack JavaScript developer Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Супер-интенсив "Версионирование и командная работа с помощью Git"
-30%
Administrator Linux. Professional
-25%
Супер-интенсив «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-25%
Administrator Linux. Advanced
-25%
Infrastructure as a code in Ansible
-25%
Network engineer
-25%
MS SQL Server Developer
-8%
Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Архитектор сетей Супер-интенсив «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Чтение и отправка почты с помощью R

Примерно с начала 2010-х R как язык переживает пик роста. Активно развиваются возможности R для Data Science и Machine Learning, возникают целые фреймворки, например Shiny, позволяющие визуализировать результаты анализа и разместить их онлайн. Появляются пакеты, позволяющие делать практически что угодно, в том числе и экзотические, например, этот мем создан с помощью пакета meme:

1-20219-04ce0a.jpg

Надеюсь, в ближайшем будущем скрипты на моем RStudio Server начнут готовить мне кофе.

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

Соответственно, задачу можно декомпозировать до следующих шагов алгоритма: 1. Мониторинг ящика на предмет получения новых писем от заданного адресата. 2. Вычленение информации из письма для поиска по БД. 3. Поиск информации и принятие решения. 4. Формирование и отправка письма с информацией и выводами.

Сначала я попробовала пойти по самому лёгкому пути и использовать свой ящик от Google и пакеты gmailr и mailr. C пакетом gmailr и с OAuth 2.0 protocol от Google все шаги алгоритма предельно просты – достаточно один раз запустить код в консоли и авторизоваться в своей почте – и дальше можно использовать скрипт автоматически без собственного участия (например с помощью cronR):

library(gmailr)
## 
## Attaching package: 'gmailr'
## The following object is masked from 'package:utils':
## 
##     history
## The following objects are masked from 'package:base':
## 
##     body, date, labels, message
MessageId<-messages(search = 'search', num_results = NULL, label_ids = NULL, include_spam_trash = NULL, page_token = NULL, user_id = "me") # поиск письма от адресата search 
size<-MessageId[[1]]$resultSizeEstimate #письма в папке от нужного адресата
final_goal<-message(MessageId[1][[1]]$messages[[1]]$id)$snippet 

Использование R в качестве коннектора к различным базам данных для реализации пункта 3 алгоритма выше не является темой этой заметки, по этому поводу написано много прекрасных статей, но лично я использую следующие библиотеки для доступа к зоопарку баз:

library(DBI)
library(RMySQL)
library(RODBC)

Формирование письма с использованием gmailr также не представляет труда, т. к. можно сохранить html-разметку в виде строковой переменной и затем просто вставить её в тело письма:

library(htmlTable)
html_body <- paste0("<html><head> <style> body{font-family:Calibri, sans-serif;}
                    table{border-left:1px solid #000000;border-top:1px solid #000000;}
                    table th{border-right:1px solid #000000;border-bottom:1px solid #000000;font-size:12px; font-weight:bold; margin: 0px; padding-left: 5px; padding-right: 5px; margin: 0px;}
                    table td{border-right:1px solid #000000;border-bottom:1px solid #000000;font-size:12px; font-weight:normal; margin: 0px; padding-left: 5px; padding-right: 5px; margin: 0px;}
                    </style>
                    </head><body><p> Заголовок 1:</p>","<br>",htmlTable(cars, rnames = F),"<br><p> Заголовок 2:</p>", "<br>","</body></html>")
ifelse(as.numeric(Sys.time()-strptime(message(MessageId[1][[1]]$messages[[1]]$id)[["payload"]][["headers"]][[18]][["value"]],  "%a, %d %b %Y %H:%M:%S %z"),units="mins")<15, {send.mail(from="mail@copany.ru",to=c('name@GMAIL.COM', 'fraud@company.ru'),subject='Fraud review',body=html_body,html=TRUE,authenticate=TRUE,smtp = list(host.name="host.company.ru", user.name = "user@company.ru", passwd = "password", ssl = F),encoding = "utf-8",send=TRUE)},"")# пример условия - проверка на то, что между временем получения письма и отправкой результата прошло менее 15 минут

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Только до 27 января!
🔥 СКИДКА 25% на курсы OTUS!