Files
eminuxCRM/app/jobs/send_mailing_recipient_job.rb
eminuxandCursor 403fe80d37
CI / scan_js (push) Has been cancelled
CI / scan_ruby (push) Has been cancelled
CI / lint (push) Has been cancelled
Serializza gli invii SMTP su una coda unica per non far chiudere Aruba.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 12:06:23 +02:00

32 lines
1004 B
Ruby

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"
clock = Mailings::SendClock.new(mailing)
unless clock.open?
mailing.enqueue_next_recipient!(recipient, from: clock.next_open_at)
return
end
if mailing.next_send_at.present? && mailing.next_send_at > Time.current
wait = mailing.next_send_at - Time.current
self.class.set(wait: wait).perform_later(recipient.id) if wait <= 2.minutes
return
end
if recipient.pending? && Mailings::OutboundQueue.enqueue(recipient)
nxt = mailing.mailing_recipients.pending.order(:id).first
mailing.enqueue_next_recipient!(nxt, from: Time.current + mailing.interval_seconds.seconds)
end
DrainOutboundJob.perform_later
end
end