2010-05-21 14 views
47

में आर से अनुलग्नक के साथ एक ईमेल कैसे भेजें, मेरे पास एक विंडोज़ मशीन से चल रही एक आर स्क्रिप्ट निर्धारित है।विंडोज

इसे समाप्त होने के बाद, मैं चाहता हूं कि इस स्क्रिप्ट को स्वचालित रूप से संलग्न कुछ लॉग फ़ाइल के साथ एक ईमेल भेजें।

कुछ अन्य स्क्रिप्ट के साथ shell() का उपयोग करना संभव हो सकता है, लेकिन मैं सोच रहा था कि आर धन्यवाद के भीतर कोई बेहतर समाधान है या नहीं।

+1

मुझे लगता है कि आप 'shell() 'लिखा था जब आप' system()' का मतलब था। –

+0

हाय अहला, मुझे उम्मीद है कि स्टडी समाधान मदद करेगा। क्या मैं पूछ सकता हूं, आप अनुसूचित आर स्क्रिप्ट के लिए क्या उपयोग करते हैं? धन्यवाद। –

+4

ताल, विंडोज़ में अनुसूचित कार्यों का उपयोग करें (मुझे लगता है कि प्रविष्टि आर सीएमडी बैच स्क्रिप्ट जैसे कुछ है। आर), * निक्स सिस्टम्स पर क्रॉन। – aL3xa

उत्तर

6

क्या आपने अभी तक sendmailR पैकेज में देखा है? यह एसएमटीपी को एक संदेश सबमिट करने की अनुमति देता है और आप शायद अनुलग्नक की अनुमति देने के लिए फ़ंक्शन को संपादित कर सकते हैं। फिर फिर, यदि आपकी एकमात्र एक लॉग फ़ाइल है तो यह उल्लेख किया जा सकता है कि यह shell() का उपयोग करने के लिए उपयुक्त होगा।

10

क्या आप एक ट्विटर संदेश के लिए बस जाएंगे? आप ट्विटर पर अपडेट पोस्ट करने के लिए आरसीआरएल का उपयोग कर सकते हैं, जिसे बाद में आपके सेल फोन पर पाठ के रूप में भेजा जा सकता है, या अधिसूचना सेटिंग्स के माध्यम से आपके ईमेल पर भेजा जा सकता है।

यहाँ देखें: http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/

+4

ट्विटर से इंटरफ़ेस करने के लिए twitterR नामक एक CRAN पैकेज है: http://cran.r-project.org/web/packages/twitteR/index.html –

+0

+1 ट्विटर का उपयोग करने के लिए, बहुत चालाक – Stedy

43

sendmailR विंडोज 7 पर मेरे लिए काम करता रहा Outlook 2010 के लिए संदर्भित http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf

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 जोड़कर भेजा जा सकता है (मैं भी यह गाढ़ा):

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) 
+0

क्या आप HTML का उपयोग कर सकते हैं "ईमेल बॉडी।"? क्या आप यूटीएफ -8 एन्कोडिंग (बहुभाषी पाठ के लिए) का उपयोग कर सकते हैं? –

+2

मुझे नहीं पता। इसे आज़माएं और देखें। – ARobertson

+2

आप जीमेल के लिए serverinfo भाग को कैसे कॉन्फ़िगर करते हैं? – qed

4

विंडोज़ के लिए एक वीबी-स्क्रिप्ट को एक साथ जोड़ सकता है (उदा। 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") 
} 
+2

बहुत बहुत धन्यवाद, यह एक सपने की तरह काम करता है! यह एकमात्र दृष्टिकोण है जिसे मैंने आर (विंडोज़ पर) में काम करने के लिए पाया है। जैसा कि पॉल के वेब पेज में बताया गया है, यदि आप जीमेल का उपयोग करते हैं तो आपको सर्वर पोर्ट को 465 पर सेट करने और "एसएसएल का उपयोग करें" विकल्प को सही पर सेट करने की आवश्यकता है। मैंने इसे कॉल करने के लिए निम्न कोड का उपयोग किया: 'SendMail (= "[email protected]" से = "[email protected]", टेक्स्ट = "हेलो", विषय = "साग हेलो", smtp = " smtp.gmail.com ", उपयोगकर्ता =" [email protected] ", पीडब्ल्यू =" ******** ") 'अपना असली पासवर्ड निश्चित रूप से डालें ... इसके अलावा, आर की कार्य निर्देशिका आवश्यक है हार्ड डिस्क पर कहीं कहीं (सी :)। –

+0

यह कमाल है! क्या एक अनुलग्नक जोड़ना संभव है? मेरे पास वीबी अनुभव बहुत सीमित है ... इसलिए, यही कारण है कि मैं पूछ रहा हूं। – maloneypatr

+0

मदद करने के लिए प्यार :-) ... जीप, ऐसा लगता है हालांकि मैंने इसे कभी भी कोशिश नहीं की, यहां देखें: http://www.paulsadowski.com/wsh/cdo.htm शीर्षक के तहत "एक संलग्न ईमेल के साथ एक टेक्स्ट ईमेल भेजना फ़ाइल "... फ़ंक्शन में प्रासंगिक पंक्तियां शामिल हो सकती हैं। – petermeissner

2

बस वे नि: शुल्क सेवा प्रदान करते हैं अपने खुद के सेलफोन के लिए एसएमएस भेजने के लिए, लोगों के एक सेवा twilio कहा जाता है जो स्वयं को अधिसूचित करने की सुविधा चाहता है याद दिलाना चाहता हूँ। आर का उपयोग कर एक पैदल मार्ग 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")) 
12

उपयोग mailR - यह प्रमाणीकरण के साथ काम करता है, संलग्नक, यह स्वचालित रूप से पाठ संदेश एचटीएमएल और अधिक के साथ भेजा।

mailR को आरजेवा की आवश्यकता होती है जो कभी-कभी दर्द का थोड़ा सा हो सकता है। खिड़कियों पर मुझे कोई समस्या नहीं है। (- कोशिश टर्मिनल में sudo R CMD javareconf अगर आप rJava के साथ परेशानी है)

mailR काम करना आसान है

sudo apt-get install openjdk-jdk 

आर में

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

: Ubuntu पर यह एक मुद्दा मैं मिला है हल github पेज पर और अच्छी तरह से प्रलेखित।आपके एसएमटीपी सर्वर अत्यधिक उपयोग संदिग्ध मिल सकती है: documentaion

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) 

नोट से

उदाहरण। उदाहरण के साथ यह मामला है जीमेल लगीं। तो कुछ मेल भेजने के बाद आपको शायद gmail account पर लॉग इन करना होगा और देखें कि खाता अस्थायी रूप से अक्षम कर दिया गया है या नहीं। यह भी ध्यान रखें कि यदि आप दो-कारक प्रमाणीकरण वाले जीमेल खाते का उपयोग करते हैं तो आपको an application specific password का उपयोग करने की आवश्यकता है।

+0

शायद आप दस्तावेज से एक उदाहरण शामिल कर सकते हैं ताकि यह प्रदर्शित किया जा सके कि कोड कैसा दिखता है। अन्य उत्तरों में सफलतापूर्वक उदाहरण शामिल थे। – BenBarnes

+0

डाउनवॉट्स? दिलचस्प? – Andreas

+0

मेरे डाउनवॉट्स नहीं। – BenBarnes