class DeliveredEmail < ApplicationRecord
validates :key, presence: true, uniqueness: true
end
class Emails::SendOnce
def call(key:, &block)
DeliveredEmail.create!(key: key)
yield
rescue ActiveRecord::RecordNotUnique
false
end
end
Emails::SendOnce.new.call(key: "receipt:order:#{order.id}") do
ReceiptMailer.order(order.id).deliver_now
end
Emails should be idempotent. Store a delivered marker (or unique key) so retries don’t spam users. This pattern is especially useful for receipts and password reset flows.