Отправка электронной почты в R через Outlook

Кто-нибудь знает, можно ли отправлять электронные письма в R через Outlook. Весь пример sendmailR использует сервер gmail. Я не могу сделать это. Есть идеи?

Спасибо!

Вы можете использовать пакет RDCOMClient для доступа к COM-объектам из R. Вы можете легко получить доступ к объекту приложения (Outlook) и настроить его для отправки своих писем. Вот простой пример, который показывает, как отправлять и отправлять по электронной почте:

 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() 

Конечно, это предполагает, что вы уже установили outlook и настроили его для отправки / получения ваших писем. Кроме того, вы можете расширить это, чтобы добавить вложения.

изменить для добавления вложения

 outMail[["Attachments"]]$Add(path_to_attch_file) 

изменить для изменения «из» (отправить из вторичного почтового ящика)

 outMail[["SentOnBehalfOfName"]] = "[email protected]" 

Можно отправлять электронные письма в R через Outlook. sendmailR работает для меня в Windows 7 и Outlook 2010. Я ссылался на 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 <- "[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) при 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) 

Вы также можете использовать vbscript для раскрытия всех функций Outlook

Ссылка: члены 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')) 

Это решение будет полезно, когда вам будет запрещено отправлять электронные письма непосредственно через SMTP-сервер.

  • Заменить значения NA по строкам
  • Укажите количество последовательных значений
  • Почему я получаю «предупреждение, что длинная длина объекта не кратная короткой длине объекта»?
  • Выбор только числовых столбцов из кадра данных
  • Добавить столбец с порядковым числом
  • Интерпретация "имеет длину> 1" предупреждение от функции `if`
  • Элементарно означает над списком матриц
  • R: gsub, pattern = vector и replacement = vector
  • Есть ли способ сделать R звуковой сигнал / воспроизвести звук в конце скрипта?
  • Почему некоторые символы Юникода отображаются в matrixх, но не в кадрах данных в R?
  • Добавить столбец «ранг» в кадр данных
  • Давайте будем гением компьютера.