class SendMailingRecipientJob < ApplicationJob queue_as :mailers def perform(recipient_id) recipient = MailingRecipient.find_by(id: recipient_id) return if recipient.nil? mailing = recipient.mailing return unless mailing.sending? return unless recipient.pending? || recipient.status == "queued" begin CampaignMailer.raise_delivery_errors = true recipient.deliver! ensure CampaignMailer.raise_delivery_errors = false if Rails.env.development? end nxt = mailing.mailing_recipients.pending.order(:id).first return if nxt.nil? wait = mailing.interval_seconds.to_i.seconds if wait.positive? self.class.set(wait: wait).perform_later(nxt.id) else self.class.perform_later(nxt.id) end end end