Хотите оперативно и своевременно узнавать о сбоях в работе скриптов 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 = "<[email protected]>"to = c("<[email protected]>",
"<[email protected]>")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. Вместо «[email protected]» впишите адрес своей Gmail-почты, вместо «[email protected]» и «[email protected]» — адреса получателей. Помните, что с 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 = "[email protected]",
to = c("Recipient 1 <[email protected]>", "[email protected]"),
cc = c("CC Recipient <[email protected]>"),
bcc = c("BCC Recipient <[email protected]>"),
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 = "[email protected]",
to = c("[email protected]", "Recipient 2 <[email protected]>"),
replyTo = c("Reply to someone else <[email protected]>")
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 <[email protected]>",
to = "[email protected]",
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 = "<[email protected]>"to =
c("<[email protected]>","<[email protected]>")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 = "[email protected]",
to = c("[email protected]", "[email protected]"),
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 = "<[email protected]>"to =
c("<[email protected]>","<[email protected]>")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 =
"[email protected]",
to = c("[email protected]", "[email protected]"),
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 = "<[email protected]>"to =
c("<[email protected]>","<[email protected]>")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-таблицей в теле.
По теме
Как отслеживать события с помощью Google Analytics 4: подробный мануал
Как настраивать события, какими они бывают, как работают — подробный гайд по настройке и работе с событиями
Всемогущая функция Query — подробное руководство
Как пользоваться одной из самых важных функций Google Таблиц — подробное руководство по Query
Свежее
Рост продаж магазина инженерного оборудования в Германии на 77%: кейс Shopping-Kobolde
Продвижение технического ecommerce с ограниченной CMS и необходимостью конкурировать за органический трафик с маркетплейсами
21 канал с миллионной аудиторией в украинском Telegram
Кто сегодня возглавляет рейтинг крупнейших Telegram-каналов Украины? Какие из них продемонстрировали наибольший рост, а какие потеряли аудиторию?
Обновляемый дайджест изменений в AI-поиске
Дайджест главных обновлений AI и их влияния на рынок

