R 发送电子邮件后立即向用户提供反馈

R 发送电子邮件后立即向用户提供反馈,r,shiny,messagebox,gmailr,R,Shiny,Messagebox,Gmailr,我需要一些闪亮的智慧。下面的代码在闪亮的服务器部分运行良好;当用户单击ui部分中的action按钮(“mailButton”,“e-mail!”)时,它会发送一封电子邮件,并通过gmailr附加一份PDF报告。我唯一的问题是没有向用户反馈是否发送了电子邮件。理想情况下,我希望屏幕中间有一个消息框(可能带有叠加)。当发送电子邮件时,它会告诉按下input$mailButton的用户这一点(该框可能会在超时15秒后消失)。此事件应大致对应于以下代码中的print(“message sent”)点(该

我需要一些闪亮的智慧。下面的代码在
闪亮的
服务器
部分运行良好;当用户单击
ui
部分中的
action按钮(“mailButton”,“e-mail!”)
时,它会发送一封电子邮件,并通过
gmailr
附加一份PDF报告。我唯一的问题是没有向用户反馈是否发送了电子邮件。理想情况下,我希望屏幕中间有一个消息框(可能带有叠加)。当发送电子邮件时,它会告诉按下
input$mailButton
的用户这一点(该框可能会在超时15秒后消失)。此事件应大致对应于以下代码中的
print(“message sent”)
点(该点会打印到终端)。向用户显示确认电子邮件确实已发送并在发送过程中阻止输入的好方法是什么(通常需要4秒钟)

#电子邮件发件人------------------------------------------------------------
ObserveeEvent(输入$mailButton{
隔离({
图书馆(Gmail)

params这似乎是
withProgress()和
showNotification()的一个很好的用例:

库(闪亮)

ui谢谢你,这看起来很好。只是一个简单的例子-在这个上下文中,我的例程
隔离({my mail sending commands})
需要去哪里?我对Shining没有太多经验。它们应该进入withProgress({})的内部。你可以手动使用setProgress(或incProgress())为了移动进度指示器。在这里,我使用Sys.sleep()作为演示的占位符函数来模拟执行一些需要花费一些时间的计算/函数。谢谢,一旦我了解了将所有内容都包含在
observeEvent{}
action
with progress{
然后简单地在代码中添加适当的
setProgress
消息。效果很好。使用
easyClose=TRUE
的后续
showmodel
可以更好地抓住用户在完成时的注意力。
library(shiny)

ui <- fluidPage(
  actionButton('go', 'go')
)

server <- function(input, output, session) {
  observeEvent(input$go, {
    withProgress(message = "Please Wait", {
      Sys.sleep(1)
      setProgress(0.25, detail = "1 Sec")
      Sys.sleep(1)
      setProgress(0.5, detail = "2 Sec")
      Sys.sleep(1)
      setProgress(0.75, detail = "3 Sec")
      Sys.sleep(1)
      setProgress(1, detail = "4 Sec")
   })
    showNotification("Your message here", type = "message", duration = 15)
  })
}

shinyApp(ui, server)
library(shiny)

ui <- fluidPage(
  actionButton('go', 'go')
)

server <- function(input, output, session) {
  observeEvent(input$go, {
    withProgress(message = "Please Wait", {
      Sys.sleep(1)
      setProgress(0.25, detail = "1 Sec")
      Sys.sleep(1)
      setProgress(0.5, detail = "2 Sec")
      Sys.sleep(1)
      setProgress(0.75, detail = "3 Sec")
      Sys.sleep(1)
      setProgress(1, detail = "4 Sec")
   })
    showModal(modalDialog(title = 'Message', h2("Content Here")))
  })
}

shinyApp(ui, server)