Как отправить электронное письмо с приложением из R в windows

У меня есть запланированный R-сценарий, запущенный с Windows-машины.

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

Использование shell() с некоторыми другими скриптами может быть возможно, но мне было интересно, есть ли лучшее решение в R. Спасибо.

sendmailR работает для меня в Windows 7. Я ссылался на http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf

smtpServer = информация для Outlook 2010 находится в файле -> Настройки учетной записи -> Настройки учетной записи -> дважды щелкните свою учетную запись -> текст в поле «Сервер»

 library(sendmailR) #set working directory setwd("C:/workingdirectorypath") #####send plain email from <- "[email protected]" to <- "[email protected]" subject <- "Email Subject" body <- "Email body." mailControl=list(smtpServer="serverinfo") sendmail(from=from,to=to,subject=subject,msg=body,control=mailControl) #####send same email with attachment #needs full path if not in working directory attachmentPath <- "subfolder/log.txt" #same as attachmentPath if using working directory attachmentName <- "log.txt" #key part for attachments, put the body and the mime_part in a list for msg attachmentObject <- mime_part(x=attachmentPath,name=attachmentName) bodyWithAttachment <- list(body,attachmentObject) sendmail(from=from,to=to,subject=subject,msg=bodyWithAttachment,control=mailControl) при library(sendmailR) #set working directory setwd("C:/workingdirectorypath") #####send plain email from <- "[email protected]" to <- "[email protected]ount.com" subject <- "Email Subject" body <- "Email body." mailControl=list(smtpServer="serverinfo") sendmail(from=from,to=to,subject=subject,msg=body,control=mailControl) #####send same email with attachment #needs full path if not in working directory attachmentPath <- "subfolder/log.txt" #same as attachmentPath if using working directory attachmentName <- "log.txt" #key part for attachments, put the body and the mime_part in a list for msg attachmentObject <- mime_part(x=attachmentPath,name=attachmentName) bodyWithAttachment <- list(body,attachmentObject) sendmail(from=from,to=to,subject=subject,msg=bodyWithAttachment,control=mailControl) 

Кроме того, несколько файлов можно отправить, добавив еще один mime_part в список msg следующим образом (я также сократил его):

 attachmentObject <- mime_part(x="subfolder/log.txt",name="log.txt") attachmentObject2 <- mime_part(x="subfolder/log2.txt",name="log2.txt") bodyWithAttachment <- list(body,attachmentObject,attachmentObject2) 

Использовать mailR – он работает с аутентификацией, вложениями, он автоматически отправляет сообщение txt вместе с html и другими.

mailR требует rJava, который иногда может быть немного больно. На windowsх у меня не было никаких проблем. На ubuntu это решило один вопрос, который у меня был:

 sudo apt-get install openjdk-jdk 

в R

 install.packages("devtools", dep = T) library(devtools) install_github("rpremraj/mailR") 

(если у вас возникли проблемы с rJava – попробуйте sudo R CMD javareconf в терминале)

mailR легко работать и хорошо документироваться на странице github.

Пример из документа

 library(mailR) send.mail(from = "[email protected]", to = c("[email protected]", "[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, attach.files = c("./download.log", "upload.log", "https://dl.dropboxusercontent.com/u/5031586/How%20to%20use%20the%20Public%20folder.rtf"), file.names = c("Download log.log", "Upload log.log", "DropBox File.rtf"), # optional parameter file.descriptions = c("Description for download log", "Description for upload log", "DropBox File"), # optional parameter debug = TRUE) 

Примечание: ваш SMTP-сервер может обнаружить чрезмерное использование подозрительного. Это относится, например, к gmail. Поэтому после отправки нескольких писем вам, вероятно, придется войти в учетную запись gmail и посмотреть, была ли временно отключена учетная запись. Также обратите внимание, что если вы используете учетную запись gmail с двухфакторной аутентификацией, вам нужно использовать специальный пароль для приложения .

Вы согласитесь на сообщение Twitter? Вы можете использовать Rcurl для публикации обновления на твиттер, который затем может быть перенаправлен на ваш мобильный телефон в виде текста или на ваш адрес электронной почты через настройки уведомлений.

См. Здесь: http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/

Вы еще не просмотрели пакет sendmailR ? Это позволяет SMTP отправлять сообщение, и вы, вероятно, можете отредактировать функцию, чтобы разрешить вложение. И снова, если его единственный файл журнала, возможно, стоит использовать shell() как вы упомянули.

Для Windows можно разобрать VB-Script (см., Например, http://www.paulsadowski.com/wsh/cdo.htm ), а затем вызвать его через оболочку.

Это может выглядеть так:

 SendMail <- function(from="[email protected]",to="[email protected]",text="Hallo",subject="Sag Hallo",smtp="smtp.my.server.de",user="me.myself.and.i",pw="123"){ require(stringr) part1 <- "Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). Const cdoAnonymous = 0 'Do not authenticate Const cdoBasic = 1 'basic (clear-text) authentication Const cdoNTLM = 2 'NTLM " part2 <- paste(paste("Set objMessage = CreateObject(",'"',"CDO.Message",'"',")" ,sep=""), paste("objMessage.Subject = ",'"',subject,'"',sep=""), paste("objMessage.From = ",'"',from,'"',sep=""), paste("objMessage.To = ",'"',to,'"',sep=""), paste("objMessage.TextBody = ",'"',text,'"',sep=""), sep="\n") part3 <- paste( "'==This section provides the configuration information for the remote SMTP server. objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendusing\") = 2 'Name or IP of Remote SMTP Server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpserver\") = ",'"',smtp,'"'," 'Type of authentication, NONE, Basic (Base64 encoded), NTLM objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate\") = cdoBasic 'Your UserID on the SMTP server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendusername\") = ",'"',user,'"'," 'Your password on the SMTP server objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/sendpassword\") = ",'"',pw,'"', " 'Server port (typically 25) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpserverport\") = 25 'Use SSL for the connection (False or True) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpusessl\") = False 'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server) objMessage.Configuration.Fields.Item _ (\"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout\") = 60 objMessage.Configuration.Fields.Update '==End remote SMTP server configuration section== objMessage.Send ",sep="") vbsscript <- paste(part1,part2,part3,sep="\n\n\n") str_split(vbsscript,"\n") writeLines(vbsscript, "sendmail.vbs") shell("sendmail.vbs") unlink("sendmail.vbs") } 

Просто хочу напомнить людям, которые хотят самообслуживающую функцию сервиса twilio, они предоставляют бесплатное обслуживание для отправки sms на ваш собственный мобильный телефон. Проход через R можно найти здесь https://dreamtolearn.com/ryan/data_analytics_viz/78

Приведен пример кода, просто замените учетные данные своими собственными.

 library(jsonlite) library(XML) library(httr) library(rjson) library(RCurl) options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) authenticate_twilio <- "https://[ACCOUNT SID]:[AUTH TOKEN]@api.twilio.com/2010-04-01/Accounts" authenticate_response <- getURL(authenticate_twilio) print(authenticate_response) postForm("https://[ACCOUNT SID]:[AUTH TOKEN]@api.twilio.com/2010-04-01/Accounts/[ACCOUNT SID]/Messages.XML",.params = c(From = "+1[twilio phone#]", To = "+1[self phone#]",Body = "Hello from twilio")) 
Interesting Posts

Как показать диалог «Открыть файл» в Access 2007 VBA?

Каков оптимальный алгоритм игры 2048?

На панели инструментов нет тени по умолчанию?

Хэш-таблицы в MATLAB

Система типов в Scala завершена. Доказательство? Пример? Выгоды?

Измените пользователя, связанного с учетной записью Google Диска (OSX), когда старая учетная запись не существует

Открыть Sublime Text 2 с новой вкладкой вместо нового окна

Обнаруживать пользователя, вставляя строку или столбец в электронную таблицу google и реагируя в скрипте

Как реализовать объемную вставку в Rails 3

Данные формы сообщения с использованием HttpWebRequest

Что такое бокс и распаковка и какие компромиссы?

Насколько придирчивы RAID-контроллеры при замене диска?

ASP.NET MVC – удаление имени controllerа из URL-адреса

Плохое качество звука 3,5-мм наушников с микрофоном на ноутбуке

Как вырезать / вставить путь к файлу в открывшемся диалоговом окне Mac os?

Давайте будем гением компьютера.