Представьте, что мы выполняем ресурсоемкие вычисления в R, которые длятся несколько часов (например, обучение той или иной модели на большом объеме данных и одновременное оценивание качества ее предсказаний путем перекрестной проверки). Сидеть перед монитором и ждать, когда эти вычисления завершатся - не очень хороший способ провести время с пользой. Вместо этого можно "попросить" R послать нам по электронной почте автоматическое уведомление о завершении вычислений. Есть как минимум четыре пакета для R, которые позволяют организовать автоматические уведомления посредством электронной почты - sendmailR, mailR, gmailR и gmailr, несколько различающихся по своему функционалу и легкости процесса настройки отправки сообщений. В качестве примера рассмотрим, как работает mailR - один наиболее "продвинутых" пакетов.
Собственно, в состав в mailR входит лишь одна функция - send.mail() - со следующими основными аргументами:
- from - электронный адрес отправителя
- to - электронный адрес получателя
- subject - тема письма
- body - тело письма
- encoding - символьный вектор, обозначающий кодировку текста в письме; поддерживаются следующие стандарты: iso-8859-1 (по умолчанию), utf-8, us-ascii, и koi8-r.
- html - логический аргумент: TRUE, если тело письма размечено с использованием HTML, и FALSE - если нет.
- smtp - список с настройками SMTP-сервера, с которого будет отправлено сообщение. Единственным обязательным параметром является host.name - адрес SMTP-сервера. В большинстве случаев необходимо также задать соответствующий порт при помощи одноименной опции port. Если аргумент authenticate = TRUE (см. ниже), то в списке параметров для smtp следует также указать user.name - имя пользователя, и passwd - пароль для авторизации на сервере. При необходимости можно также указать протокол шифрования: ssl = TRUE или tls = TRUE.
- authenticate - логический аргумент: TRUE, если для подключения к SMTP-серверу требуется авторизация, и FALSE - если нет.
- attach.files - символьный вектор, содержащий пути или URL-ссылки к файлам, которые необходимо вложить в письмо.
Дополнительную информацию по этой функции можно получить, выполнив команду ?send.mail.
Для корректной работы пакет mailR требует, чтобы на компьютере были установлены актуальная версия Java и пакет rJava (устанавливается автоматически вместе с mailR). Если Java на вашей машине еще нет, то выполните установку, скачав соответствующий вашей операционной системе дистрибутив отсюда: https://www.java.com/en/download/manual.jsp
Во избежание возможных проблем, настоятельно рекомендуется скачать этот дистрибутив самостоятельно, т.е. не использовать автоматический установщик Java. Например, при работе на компьютере с 64-битной Windows нужен будет следующий файл (указан стрелкой):
По умолчанию Java будет установлена в C:\Program Files. Рекомендуется этот путь не изменять. Далее о месте нахождения Java необходимо сообщить R. Лучше всего это сделать путем настройки соответствующей глобальной опции - java.home где-нибудь в вашем скрипте до вызова функции send.mail(). Соответствующая команда будет выглядеть примерно следующим образом:
options(java.home = "C:\\Program Files\\Java\\jre1.8.0_73")
Дальше можно вызывать пакет mailR и отсылать письмо. В приведенном ниже примере, предполагается что уведомление отсылается с Gmail-адреса отправитель@gmail.com на адрес получатель@домен.расширение (обратите внимание на необходимость заключения этих адресов при работе с Gmail в < и >) через стандартный Gmail SMTP Server (подробнее о его конфигурации см. здесь):
library(mailR)
send.mail(from = "<отправитель@gmail.com>",
to = "<получатель@домен.расширение>",
subject = "Обучение модели завершено",
body = "Хватит чаи гонять!",
smtp = list(host.name = "smtp.gmail.com",
port = 465,
user.name = "отправитель@gmail.com",
passwrd = "xxxxxx",
ssl = TRUE),
authenticate = TRUE,
encoding = "utf-8")
Множество других примеров работы с mailR (в частности, примеры отправки отчетов в формате HTML, сгенерированных при помощи R Markdown), можно найти на GitHub-странице этого проекта.
В заключение хотелось бы напомнить о необходимости соблюдения мер безопасности при использовании пакетов вроде mailR. В частности, речь идет о том, что если вы, например, вставите учетные данные для своего Gmail-акаунта в R-скрипт, а затем выложите этот скрипт в публичный доступ на сайте вроде GitHub, то ваши учетные данные сразу станут "достоянием общественности". В блоге Revolution Analytics есть хорошая статья, посвященная этой проблеме и тому, как с ней бороться.
Плюс если захотеть, то и обратная связь.
Username and password required for SMTP authentication." Имя пользователя и пароль вписал
Отправить комментарий