Windows マシンから実行する R スクリプトをスケジュールしました。
スクリプトが終了したら、ログ ファイルが添付されたメールが自動的に送信されるようにします。
他のいくつかのスクリプトで使用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 <- "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)
さらに、次のように msg リストに別の 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)
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 = "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 アカウントにログインして、アカウントが一時的に無効になっているかどうかを確認する必要があります。また、2 要素認証で Gmail アカウントを使用する場合は、アプリケーション固有のパスワードを使用する必要があることに注意してください。
ツイッターのメッセージでよろしいですか?Rcurl を使用して Twitter に更新を投稿し、それをテキストとして携帯電話に転送したり、通知設定を介してメールに転送したりできます。
こちらをご覧ください: http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/
sendmailR
もうパッケージを調べましたか?これにより、SMTP がメッセージを送信できるようになり、おそらく関数を編集して添付ファイルを許可することができます。繰り返しになりますが、ログ ファイルが 1 つしかない場合は、shell()
前述のように使用する価値があるかもしれません。
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")
}
twilio と呼ばれるサービスの自己通知機能が必要な人に思い出してもらいたいのですが、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"))
これには遅れていますが、R-Help のこの例のように、RDCOMClient を正しく使用することで、vbscript へのシェルアウトを回避できます。
> sendEmail(ema = "r-help at r-project.org",
name = "R-help mailing list",
subject = "How to send Email from R using the RDCOMClient"
msgBody = "here is the body of the message")
The package RDCOMClient is available at http://www.omegahat.org/RDCOMClient.
"sendEmail" <-
function(ema, name, subject, msgBody, deliverNow = TRUE)
{
require(RDCOMClient)
ema <- paste("SMPT:", ema, sep="") ## prepend protocol to address
## create an e-mail session
session <- COMCreate("Mapi.Session")
session$Logon()
## add a message to the outbox collection of messages
outbox <- session[["Outbox"]]
msg <- outbox[["Messages"]]$Add(subject, msgBody)
## add recipient's name (TODO: addMultiple() or loop, if many recipients)
msg[["Recipients"]]$Add(name, ema)
msg$Send()
if(deliverNow)
msg$DeliverNow()
session$Logoff() ## wrap up
}