Хотите оперативно и своевременно узнавать о сбоях в работе скриптов R? Достаточно настроить оповещения на email. В этой статье я опишу, как настроить рассылку с помощью
Что можно отправлять в письмах:
- отчеты по результату работы скрипта на свою почту или по списку конкретных 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 = "<sender@gmail.com>"to = c("<recipient1@gmail.com>",
"<recipient2@gmail.com>")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. Команда «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 команды:
- для 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')
Перед запуском команды замените «jre1.8.0_102» на название файла Java, установленного на вашем компьютере. Файл можно найти в одноименной папке «Java», о которой я упоминал в предыдущем пункте.
3. Далее нужно определить, требует ли ваш SMTP-сервер прохождения аутентификации, и в зависимости от этого выбрать подходящий код для отправки писем.
3.1. Для отправки писем без процедуры аутентификации в код подставьте данные:
- тема и тело письма;
- отправитель и получатели;
- параметры SMTP-сервера.
library(mailR)send.mail(from = "sender@gmail.com",
to = c("Recipient 1 <recipient1@gmail.com>", "recipient2@gmail.com"),
cc = c("CC Recipient <cc.recipient@gmail.com>"),
bcc = c("BCC Recipient <bcc.recipient@gmail.com>"),
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 <recipient2@gmail.com>"),
replyTo = c("Reply to someone else <someone.else@gmail.com>")
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 <sender@gmail.com>",
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 = "<sender@gmail.com>"to =
c("<recipient1@gmail.com>","<recipient2@gmail.com>")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 -
<img src=\"https://www.apache.org/images/asf_logo_wide.gif\"></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('<!DOCTYPE html PUBLIC "-
//W3C//DTD XHTML 1.0Strict//EN"
"https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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 demo</title> <style type="text/css">
</style></head><body><h1>HTML demo</h1></body>
</html>')msg[["headers"]][["Content-Type"]]
<- "text/html"from = "<sender@gmail.com>"to =
c("<recipient1@gmail.com>","<recipient2@gmail.com>")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('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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 demo</title> <style type="text/css">
</style> </head> <body>
<h1>My table iris</h1>', iris_html ,'
</body> </html>'))msg[["headers"]][["Content-Type"]]
<- "text/html"from = "<sender@gmail.com>"to =
c("<recipient1@gmail.com>","<recipient2@gmail.com>")subject
<- "HTML test"body
<- list(msg)sendmail(from=from,to=to,subject=subject,msg=body,
control=list(smtpServer="ASPMX.L.GOOGLE.COM"))
Так же легко преобразовать любую таблицу из R в HTML-формат и отправлять ее в письме.
Выводы
Язык R достаточно мощный, чтобы
- Пакет «sendmailR» прост в установке, но не поддерживает процедуру аутентификации, и вы сможете отправлять письма только пользователям Gmail или G Suite.
- Пакет «mailR» поддерживает аутентификацию, но в процессе его установки вам также придется инсталлировать Java.
- С помощью языка R можно настроить не только отправку простых текстовых сообщений, но и письма:
- с текстом на кириллице;
- в формате HTML;
- с HTML-таблицей в теле.
Свежее
Как CRO и гибкий подход к обновлению дизайна помогают монетизировать трафик. Подход Netpeak Ukraine
Из статьи вы узнаете, как оптимизация коэффициента конверсий способствует увеличению прибыли без дополнительных затрат на рекламу
Что такое партнерская программа от Netpeak Ukraine, и Как к ней присоединиться
Рассказываем, как партнерская программа Netpeak Ukraine помогает бизнесам находить надежных подрядчиков, получать новых клиентов и увеличивать прибыль через реферальное и технологическое сотрудничество
Mobile-First Indexing. Все, что нужно знать об индексации сайта для мобильных устройств
В этой статье расскажу, что такое мобильная индексация, как ее выполнить для вашего сайта и преодолеть типичные сложности с помощью удобных инструментов