Как отправить письмо с вложением от R в windows - PullRequest
51 голосов
/ 22 мая 2010

У меня запланирован запуск сценария R с компьютера Windows.

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

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

Ответы [ 6 ]

44 голосов
/ 03 февраля 2012

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 <- "you@account.com"
to <- "recipient@account.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 в список сообщений следующим образом (я также сжал его):

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)
15 голосов
/ 06 января 2016

Использовать mailR - работает с аутентификацией, вложениями, автоматически отправляет текстовые сообщения вместе с 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 = "sender@gmail.com",
          to = c("recipient1@gmail.com", "recipient2@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,
          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 с двухфакторной аутентификацией, вам нужно использовать пароль приложения .

10 голосов
/ 22 мая 2010

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

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

6 голосов
/ 22 мая 2010

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

4 голосов
/ 25 июля 2012

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

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

SendMail <- function(from="me@my-server.de",to="me@my-server.de",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")
}
3 голосов
/ 30 сентября 2015

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