【问题标题】:Rails—how to see whether an email was sent in the past weekRails——如何查看过去一周内是否发送了一封电子邮件
【发布时间】:2021-02-25 00:29:17
【问题描述】:

我正在向非活跃用户发送一封电子邮件,内容是“请在 7 天内登录,否则您的帐户将被停用”。

我有一项服务可以获取所有非活动用户并发送电子邮件,但我每天都运行此服务,我只想给每个用户发送一次电子邮件,而不是每天。

class DeactivateOldEmailsService
  def run
    to_deactivate = User.havent_signed_in_for_n_days(97)
    to_deactivate.each { |user| user.update(active: false) }

    to_warn = User.havent_signed_in_for_n_days(90)
    to_warn.each do |user|
      messages_for_user_per_employer = InactiveEmailsMailer.account_will_expire(user).deliver_later
    end
  end
end

如何检查用户是否已收到电子邮件?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 actionmailer


    【解决方案1】:

    我实际上面临着非常相似的事情: 每周向用户(订阅自上次发送后发生的更改)发送电子邮件,此作业每天运行,我不希望用户每天收到超过一封电子邮件。

    我的计划是将此信息存储在表用户的专用列 last_sent_at 上,并且仅当条件 DateTime.current - last_sent_at > 7.daystrue 时才发送电子邮件。

    编辑:我应该阅读上一个答案的最后一句话......正是我刚才描述的......对不起!

    【讨论】:

      【解决方案2】:

      如果您没有在数据库中保存电子邮件的发送时间,则很难检查用户是否已收到通知电子邮件。日志文件中可能还有一些数据,但是一旦成功发送电子邮件,任何发送作业都会迅速从队列中删除。

      从您的源代码中,我猜您的用户表中可能有类似“last_signed_in”的内容。如果用户已经 90 天没有登录,您可以简单地向他们发送电子邮件,例如:

      to_warn.each do |user|
        if user.last_signed_in === 90.days.from_now
          messages_for_user_per_employer = InactiveEmailsMailer.account_will_expire(user).deliver_later
        end
      end
      

      或者您可以在用户表中创建一个新列notice_deactivation_email_sent_at来检查用户是否收到了通知邮件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 1970-01-01
        相关资源
        最近更新 更多