【问题标题】:Sending email from shiny从闪亮发送电子邮件
【发布时间】:2015-03-30 05:32:03
【问题描述】:

我是 Shiny 的新用户,我有兴趣创建一个 Web 应用程序,访问者可以在其中填写一些问题(取决于随机 R 数据),然后他们可以提交这些问题。

我的问题是找到通过电子邮件向我发送该信息的方法,例如,每次他们提交数据时。

我是一名大学讲师,我认为这是评估我的学生的好方法。

【问题讨论】:

  • 您将闪亮的服务器托管在哪里?电子邮件的配置将很大程度上依赖于此,如果您的托管服务提供商不支持它,甚至可能无法实现。如果您尝试从本地运行的 Shiny 中执行此操作,那么配置将取决于用户的电子邮件设置,这将更难弄清楚。
  • 目前我正试图在闪亮的服务器上托管我的这个网站,但我已经读到它只在 Linux 中工作,所以我在我的电脑上有这个网站和 runapp。

标签: r shiny


【解决方案1】:

这是我为在 Shiny 应用程序中测试 sendmailR 包而编写的 Shiny 电子邮件发件人。在 Linux 平台上,我没有配置任何东西,并且该应用程序完美运行。用户在由shinyAce 包生成和处理的文本区域中键入消息正文。

ui.R

shinyUI(pageWithSidebar(

  headerPanel("Email sender"),

  sidebarPanel(
    textInput("from", "From:", value="from@gmail.com"),
    textInput("to", "To:", value="to@gmail.com"),
    textInput("subject", "Subject:", value=""),
    actionButton("send", "Send mail")
  ),

  mainPanel(    
    aceEditor("message", value="write message here")
  )

))

server.R

library(shinyAce)
library(sendmailR)

shinyServer(function(input, output, session) {

  observe({
    if(is.null(input$send) || input$send==0) return(NULL)
    from <- isolate(input$from)
    to <- isolate(input$to)
    subject <- isolate(input$subject)
    msg <- isolate(input$message)
    sendmail(from, to, subject, msg)
  })

})

【讨论】:

  • 在 Windows 中,使用该代码时出现错误:观察者中未处理的错误:无法打开连接
  • 不幸的是,这不适用于henkie.shinyapps.io/lalala
  • @Jim 也许 RStudio 的人没有在shinyapps 上配置邮件服务器,以便他们的所有用户不使用他们的服务器发送一些电子邮件(这不是我的错,不是拒绝我的理由回答...)
  • 通过observeEvent()观察输入不是更好吗?因为如果在发送邮件后输入发生变化,反应变量 input$send 保持为真,并且每次其他输入(如 $from 或 $two)更改时,都会发送邮件。
  • @Manuel input$frominput$to 是孤立的 => 观察者对它们没有反应。确实可以使用observeEvent(input$send, {......,这样就不需要isolate。但是observeEvent 在我写这个答案的时候并不存在。
【解决方案2】:

R 绝对可以发送电子邮件。谷歌搜索R send email 将我带到sendmailR 包,该包可从 CRAN 获得。也可以看看:

【讨论】:

    【解决方案3】:

    这应该是一个好的开始:

    library(shiny)
    ui <- pageWithSidebar(
      headerPanel("fill this and send"),
      sidebarPanel(
    
      ),
      mainPanel(
        textInput("name", "Name:", ""),
        textInput("body", "Body:", ""),
        actionButton("goButton",label = "Send this")
    
      )
    )
    
    
    server <- function(input, output) {
      observe({
        # Take a dependency on input$goButton
        if (input$goButton == 0)
          return(NULL)
        # Use isolate() to avoid dependency on input$goButton
        isolate({
          info <- data.frame(subject=paste("New info from:",input$name),
                             body = info$body)
          InfromMe(info)
        })
      })
    }
    runApp(list(ui=ui,server=server))
    

    其中 inforMe 是使用 PaulHimstra 答案的邮件功能:

    #####send plain email
    InfromMe <- function(info){
      from <- "you@account.com"
      to <- "recipient@account.com"
      subject <- info$subject
      body <- info$body                    
      mailControl=list(smtpServer="serverinfo")
      sendmail(from=from,to=to,subject=subject,msg=body,control=mailControl)
    }
    

    【讨论】:

    • 我必须在哪里放置 InfromMe 函数?
    • 这是我回答的最后。
    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2017-09-25
    • 2010-09-07
    • 2018-06-09
    • 2016-08-28
    • 2016-03-16
    • 2012-12-16
    • 2011-05-19
    相关资源
    最近更新 更多