在 OSX 上通过 R 发送 Outlook 电子邮件的解决方法

问题描述 投票:0回答:3

我浏览了整个网站,但未能找到答案。

我需要使用 R 通过我的工作 Outlook 电子邮件发送电子邮件。它必须来自 Outlook,而不是其他任何地方。

问题是,我使用的计算机是 OSX,所以

RDCOMClient
无法工作。

编辑:尝试过这个,但行不通。

sender<-"[email protected]"
recipients<-c("[email protected]")
send.mail(from = sender, to = recipients,
          subject = "Test",
          body = BodyOfMessage,
          smtp = list(host.name = "smtp-mail.outlook.com"),
          authenticate = FALSE,
          html = TRUE,
          send = TRUE)Does anyone have a workaround? 

它导致了这个错误:

org.apache.commons.mail.EmailException:将电子邮件发送到 以下服务器失败:smtp-mail.outlook.com:25 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410) 在 org.apache.commons.mail.Email.send(Email.java:1437) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 处 RJavaTools.invokeMethod(RJavaTools.java:386) 原因: com.sun.mail.smtp.SMTPSendFailedException:530 5.7.57 SMTP;客户是 在 MAIL FROM 期间未通过身份验证发送匿名邮件 [BN6PR19CA0117.namprd19.prod.outlook.com]

在 com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2202) 在 com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1693) 在 com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1194) 在 javax.mail.Transport.send0(Transport.jaNULL va:254) 处 javax.mail.Transport.send(Transport.java:124) 在 org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400) ... 6 更多 错误:EmailException (Java):将电子邮件发送至以下地址 服务器失败:smtp-mail.outlook.com:25

r rstudio rdcomclient
3个回答
1
投票

因此,您不一定要通过 Outlook 客户端发送此信息,这就是 Outlook 的全部内容。您可能希望允许您编写的 R 脚本和使用的库成为电子邮件客户端。我使用 mailR 取得了很大的成功。有些人喜欢 sendmailR 来发送消息。他们都有各自的优点。如果您从主机运行大量脚本,您的电子邮件管理员可能会允许未经身份验证的发送。或者您可以在脚本中进行身份验证。 例如:

library(mailR)
#################
# Generate Spam #
#################
BodyOfMessage <- paste("<html><body><p>Hello,</p><p>This is an email message.</p>
                      <hr>
                      <p>The second table is a list of users that need to be toggled in the system, by adding them to the correct securitygroup.</p>
                      <p>", toggle.these.people, "</p>
                      <p>Scott</p></body></html>")
#mailR
    sender<-"[email protected]"
    recipients<-c("[email protected]")
    send.mail(from = sender, to = recipients,
    subject = paste("Blah. Created: today.", sep = ""),
    body = BodyOfMessage,
    smtp = list(host.name = "smtp.exchangeserver.org"),
    authenticate = FALSE,
    html = TRUE,
    attach.files = CSVFileNameIs,    
    send = TRUE)

0
投票

郑重声明(因为我找不到当前的解决方案):使用 Applescript 可以通过 Outlook 从 R 发送电子邮件。为此,Outlook 目前需要恢复到旧版本,尽管新 Outlook 应该很快就会支持它。

然后你需要一个保存在文件中的Applescript函数。此版本接受多个收件人 - 显然可以扩展到抄送、附件等。

on run argv
    set varSubject to item 1 of argv
    set varContent to item 2 of argv
    set shouldSend to item 3 of argv
    set recipientDetails to items 4 through end of argv

    tell application "Microsoft Outlook"
        set newMail to make new outgoing message with properties {subject:varSubject, content:varContent}

        repeat with i from 1 to (count recipientDetails) by 2
            set varName to item i of recipientDetails
            set varEmail to item (i + 1) of recipientDetails
            make new recipient at newMail with properties {email address:{name:varName, address:varEmail}}
        end repeat

        if shouldSend is "true" then
            tell newMail to send
        end if
    end tell
end run

然后可以像这样从 R 调用

send_email <- function(subject, content, names, emails, send = FALSE) {
    script_path <- "applescript_send_email.scpt"  # Update with the correct path to your script
    send_flag <- ifelse(send, "true", "false")

    # Combine names and emails
    recipient_args <- mapply(function(name, email) c(shQuote(name), shQuote(email)), names, emails, SIMPLIFY = FALSE)
    recipient_args <- unlist(recipient_args)

    args <- c(shQuote(subject), shQuote(content), send_flag, recipient_args)
    system2("osascript", args = c(script_path, args), wait = FALSE)
}

send_email("Hello again", "<b>Good</b>Bye", c("Jon Snow", "Arya Stark"), c("[email protected]", "[email protected]"), TRUE)

-1
投票

这就是我使用的,它对我来说效果很好。

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()
© www.soinside.com 2019 - 2024. All rights reserved.