如何使用delayed_jobs或其他任何方式在Rails中由多个用户在给定时间发送多封邮件?

时间:2016-11-07 09:54:51

标签: ruby-on-rails delayed-job

我正在使用delyed_jobs机制发送电子邮件。我有一个要求,其中一个名为" send_reports_at"必须添加和 当用户点击它时,日历控件将打开日期和时间,如果用户选择,则必须在某个时间发送电子邮件。

许多人建议我使用调度程序和cron作业,但我对此完全陌生。有些R& D,我在extended_jobs中使用了run_at功能。 我不知道是否正确,因为一次发送多封电子邮件。但它以前曾经工作过,而不是以前工作。 这是我的控制器代码:

def send_report_email
    send_to_agents = params.has_key?("send_to_agents") && params["send_to_agents"] == "true"
    if @report.update_attributes(params[:report])
      set_photo_position(false)
      @report.save

      @good_emails.each do |email|
        if @report.send_reports_at ==""
          ReportMailer.delay.additional_emails(email, @user, @report)
        else
          report_time = Time.zone.parse(@report.send_reports_at).utc
          ReportMailer.delay(run_at: report_time).additional_emails(email, @user, @report)
        end      
      end
      ReportMailer.delay.report_sent(@user, @report, @good_emails, @bad_emails, @unsubscribed_emails)
    end

    respond_to do |format|
      format.json { render :json => { :success => true, :report_id => @report.id, :redirect => user_reports_url(current_user), :notice => 'Report was successfully sent!' } }
    end

结束

请帮助如何继续这个?

1 个答案:

答案 0 :(得分:0)

不要循环 @good_mails 。在一个延迟的工作任务中发送所有好的邮件。更改方法 additional_emails 中的逻辑以接收@good邮件数组并在那里循环。

j

我希望这会有所帮助。