【问题标题】:how to use linux 'mail' command from a ruby file to send a mail?如何使用 ruby​​ 文件中的 linux 'mail' 命令发送邮件?
【发布时间】:2016-05-19 01:37:07
【问题描述】:


在下面的代码中,我必须发送一封关于进程状态的电子邮件,无论是完成、错误还是超时......

    def check_for_forecasts
   wait_until_time = Time.now + timeout.minutes
   loop do
       RAILS_DEFAULT_LOGGER.info "Checking if process has finished"
     if find_token != 0
       update_completion_status
       RAILS_DEFAULT_LOGGER.info "Process has finished"
       break
     elsif find_error != 0
       update_timed_out_field
       RAILS_DEFAULT_LOGGER.info "Process has errored"
       break
     elsif DateTime.now > wait_until_time
       update_timed_out_field
       RAILS_DEFAULT_LOGGER.info "Process has timed out"
       break
     else
       RAILS_DEFAULT_LOGGER.info "Waiting for Process to finish"
       sleep(60) # if it hasn't completed then wait 1 min and try again.
     end
    end
  end

一般来说,我们只在 .sh 文件而不是 .rb 文件中使用 linux 'mail' 命令。下面是我们如何编写“邮件”命令以在 .sh 文件中发送邮件。

 mail -s "the process has been finished" abc@xyz.com<<EOM
      The process has finished successfully.    
EOM

有什么方法可以在 .rb 文件中使用简单的 mail 命令吗?还是我必须为此安装任何 gem?

请帮忙。 谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    用 ruby​​ 做同样的事情的一个非常丑陋但有用的方法:

    to = "abc@xyz.com"
    subject = "the process has been finished"
    content = "The process has finished successfully."
    `mail -s "#{subject}" #{to}<<EOM
      #{content}
    EOM`
    

    【讨论】:

    • 您好罗拉,感谢您的回答。我可以将相同的代码放在 .rb 文件中以发送邮件,而不是在 .sh 文件中创建一个函数并从 ruby​​ 代码中调用它吗?
    • 是的,就是这样,为了能够通过运行系统命令从 ruby​​ 发送电子邮件,我还写了如何将 ruby​​ 变量添加到命令中。尝试将其放入 .rb 文件中,执行它,您应该会收到您的电子邮件(只需确保将变量的值更改为 to
    【解决方案2】:

    您可以在 Ruby 中使用反引号来运行命令行指令。所以你想要的是这样的:

    `mail -s "the process has been finished" abc@xyz.com<<EOM
      The process has finished successfully.    
    EOM`
    

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2015-03-19
      • 1970-01-01
      • 2017-08-05
      • 2019-12-16
      • 2011-02-05
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多