Как отправить электронную почту с вложением из R в windows - программирование
Подтвердить что ты не робот

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

У меня есть запланированный R script, запущенный с Windows-машины. После того, как он закончится, я хочу, чтобы этот script автоматически отправил электронное письмо с прикрепленным файлом журнала. Использование shell() с некоторыми другими скриптами может быть возможно, но мне было интересно, есть ли лучшее решение внутри R. спасибо.

4b9b3361

Ответ 1

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)

Кроме того, несколько файлов могут быть отправлены путем добавления другого 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)

Ответ 2

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

mailR требует rJava, который иногда может быть немного больно. На окнах у меня не было никаких проблем. На 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 с двухфакторной аутентификацией, вам нужно использовать пароль для конкретного приложения.

Ответ 3

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

Смотрите здесь: http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/

Ответ 4

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

Ответ 5

Для 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")
}

Ответ 6

Просто хочу напомнить людям, которые хотят самообслуживающую функцию сервиса twilio, они предоставляют бесплатную услугу для отправки смс на ваш собственный мобильный телефон. Прогулка с использованием 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"))