web-dev-qa-db-ja.com

WindowsでRから添付ファイル付きのメールを送信する方法

私は、Windowsマシンから実行されるRスクリプトをスケジュールしています。

終了後、このスクリプトがログファイルが添付された電子メールを自動的に送信することを望みます。

Shell()を他のスクリプトと一緒に使用することは可能かもしれませんが、R内にもっと良い解決策があるかどうか疑問に思いました。ありがとう。

52
ahala

sendmailRはWindows 7で動作します。私は http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf を参照しました

outlook 2010のsmtpServer =情報は、ファイル->アカウント設定->アカウント設定->アカウントをダブルクリック->「サーバー」ボックスのテキストにあります。

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)
45
ARobertson

mailR を使用します-認証、添付ファイルで動作し、htmlなどとともにtxtメッセージを自動的に送信します。

mailRにはrJavaが必要ですが、これは少し苦痛になる場合があります。 Windowsでは問題はありません。 Ubuntuで、これは私が持っていた1つの問題を解決しました。

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アカウント にログインし、アカウントが一時的に無効になっているかどうかを確認する必要があります。また、2要素認証でgmailアカウントを使用する場合は、 アプリケーション固有のパスワード を使用する必要があることに注意してください。

15
Andreas

Twitterメッセージで解決しますか? Rcurlを使用してTwitterに更新を投稿すると、テキストとして携帯電話に転送したり、通知設定を介してメールに転送したりできます。

こちらをご覧ください: http://www.sakana.fr/blog/2007/03/18/scripting-Twitter-with-curl/

10
chrisamiller

sendmailRパッケージをまだ調べましたか? SMTPがメッセージを送信できるようにするため、おそらく関数を編集して添付ファイルを許可できます。繰り返しますが、ログファイルが1つだけの場合は、前述のようにShell()を使用するだけの価値があるかもしれません。

6
Stedy

Windowsの場合、VB-Scriptを一緒に解析し(たとえば http://www.paulsadowski.com/wsh/cdo.htm を参照)、Shell経由で呼び出します。

これは次のようになります。

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")
}
4
petermeissner

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"))
3
Chen