Bienvenido a nuestra página, en este sitio vas a encontrar la solucíon a lo que buscas.
Solución:
Puedes usar RDCOMClient
package para acceder a los objetos COM desde dentro de R. Puede acceder fácilmente al objeto de aplicación (Outlook) y configurarlo. Aquí un ejemplo simple de enviar un correo electrónico:
library(RDCOMClient)
## init com api
OutApp <- COMCreate("Outlook.Application")
## create an email
outMail = OutApp$CreateItem(0)
## configure email parameter
outMail[["To"]] = "[email protected]"
outMail[["subject"]] = "some subject"
outMail[["body"]] = "some body"
## send it
outMail$Send()
Por supuesto, esto supone que ya ha instalado Outlook y lo ha configurado para enviar / recibir sus correos electrónicos. Agregar un archivo adjunto también es bastante simple:
outMail[["Attachments"]]$Add(path_to_attch_file)
enviando en nombre del buzón secundario:
outMail[["SentOnBehalfOfName"]] = "[email protected]"
Es posible enviar correos electrónicos en R a través de Outlook. sendmailR funciona para mí en Windows 7 y Outlook 2010. Hice referencia a http://cran.es.r-project.org/web/packages/sendmailR/sendmailR.pdf
smtpServer = la información para Outlook 2010 está en Archivo -> Configuración de la cuenta -> Configuración de la cuenta -> haga doble clic en su cuenta -> texto en el cuadro “Servidor”
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)
Además, se pueden enviar varios archivos agregando otro mime_part a la lista de mensajes de la siguiente manera (también lo condensé):
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)
También puede usar vbscript para exponer todas las funcionalidades de Outlook
Referencia: Miembros de MailItem (Outlook) - MSDN - Microsoft
################################################
#Outlook Enumerations
################################################
#OlMailRecipientType Enumeration (Outlook)
OlMailRecipientType <- c(olBCC=3, olCC=2, olOriginator=0, olTo=1)
#OlBodyFormat Enumeration (Outlook)
OlBodyFormat <- c(olFormatHTML=2, olFormatPlain=1, olFormatRichText=3, olFormatUnspecified=0)
#OlImportance Enumeration (Outlook)
OlImportance <- c(olImportanceHigh=2, olImportanceLow=0, olImportanceNormal=1)
#OlSensitivity Enumeration (Outlook)
OlSensitivity <- c(olConfidential=3, olNormal=0, olPersonal=1, olPrivate=2)
#OlDefaultFolders Enumeration (Outlook)
OlDefaultFolders <- c(olFolderCalendar=9, olFolderConflicts=19, olFolderContacts=10, olFolderDeletedItems=3,
olFolderDrafts=16, olFolderInbox=6, olFolderJournal=11, olFolderJunk=23,
olFolderLocalFailures=21, olFolderManagedEmail=29, olFolderNotes=12, olFolderOutbox=4,
olFolderSentMail=5, olFolderServerFailures=22, olFolderSyncIssues=20,
olFolderTasks=13, olFolderToDo=28, olPublicFoldersAllPublicFolders=18, olFolderRssFeeds=25)
################################################
#function to send email using Outlook
################################################
outlookSend <- function(To, Subject='', CC=NULL, BCC=NULL,
HTMLBodyFile=NULL, HTMLBody=NULL, Body='', Attachments=NULL,
DeferredDeliveryTime=NULL, OriginatorDeliveryReportRequested=NULL, ReadReceiptRequested=NULL,
FlagRequest=NULL, Importance=NULL, Sensitivity=NULL,
SentOnBehalfOfName=NULL)
vbscript <- c('Dim objOutlook',
'Dim objMailItem',
'Dim objFileSystem',
'Dim objNamespace',
'Dim objSentFolder',
'Set objOutlook = CreateObject("Outlook.Application")',
'Set objMailItem = objOutlook.CreateItem(0)',
'With objMailItem',
paste0('t.Subject = "', Subject, '"'),
#Add recipients
unlist(lapply(To, function(recip) c(
paste0('tSet recip = .Recipients.Add ("',recip,'")'),
paste('trecip.Type =',OlMailRecipientType['olTo'])))),
if (!is.null(CC))
unlist(lapply(To, function(recip) c(
paste0('tSet recip = .Recipients.Add ("',recip,'")'),
paste('trecip.Type =',OlMailRecipientType['olCC']))))
,
if (!is.null(BCC))
unlist(lapply(To, function(recip) c(
paste0('tSet recip = .Recipients.Add ("',recip,'")'),
paste('trecip.Type =',OlMailRecipientType['olBCC']))))
,
't.Recipients.ResolveAll',
#Insert email body
if (!is.null(HTMLBodyFile))
c(paste('t.BodyFormat =', OlBodyFormat['olFormatHTML']),
'tSet objFileSystem = CreateObject("Scripting.FileSystemObject")',
paste0('tSet file = objFileSystem.OpenTextFile("',HTMLBodyFile,'", 1)'),
't.HTMLBody = file.ReadAll')
else if (!is.null(HTMLBody))
c(paste('t.BodyFormat =', OlBodyFormat['olFormatHTML']),
paste0('t.HTMLBody = "',HTMLBody,'"'))
else
c(paste('t.BodyFormat =', OlBodyFormat['olFormatPlain']),
paste0('t.Body = "', Body, '"'))
,
#Add attachments
if (!is.null(Attachments))
vapply(Attachments, function(x) paste0('t.Attachments.Add "',x,'"'), character(1))
,
#copy of the mail message is saved down
't.DeleteAfterSubmit = False',
#Delay delivery in minutes
if (!is.null(DeferredDeliveryTime))
paste0('t.DeferredDeliveryTime = dateadd("n", ',DeferredDeliveryTime,', Now)')
,
#Indicates the requested action for a mail item
if (!is.null(FlagRequest))
't.FlagRequest = "Follow up"'
,
#Indicates the relative importance level for the mail item
if (!is.null(Importance))
paste('t.Importance =', OlImportance[Importance])
,
#OriginatorDeliveryReportRequested of type logical: whether to receive delivery report
if (!is.null(OriginatorDeliveryReportRequested) && OriginatorDeliveryReportRequested)
't.OriginatorDeliveryReportRequested = True'
,
#ReadReceiptRequested of type logical: request read receipt
if (!is.null(ReadReceiptRequested) && ReadReceiptRequested)
't.ReadReceiptRequested = True'
,
#Indicates the the display name for the intended sender of the mail message
if (!is.null(SentOnBehalfOfName))
paste('t.SentOnBehalfOfName =', SentOnBehalfOfName)
,
#Indicates the sensitivity for the Outlook item
if (!is.null(Sensitivity))
paste('t.Sensitivity =', OlSensitivity[Sensitivity])
,
'End With',
'objMailItem.Send',
'Set objFileSystem = Nothing',
'Set objMailItem = Nothing',
'Set objOutlook = Nothing')
vbsfile <- tempfile('vbs',getwd(),'.vbs')
write(vbscript, vbsfile)
shell(paste('cscript /NOLOGO', vbsfile))
unlink(vbsfile)
#outlookSend
#Examples Usage:
outlookSend(To=c("[email protected]","[email protected]"),
Subject="XXX", HTMLBodyFile='C:/Users/XXX/Documents/XXX.html',
Attachments=c('C:/Users/XXX/Documents/XXX.html', 'C:/Users/XXX/Documents/XXX.txt'))
Esta solución será útil cuando no pueda enviar correos electrónicos directamente a través del servidor SMTP.
Ten en cuenta mostrar este escrito si lograste el éxito.