9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'app/jobs/rails_drips/delivery_job.rb', line 9
def perform(delivery_id)
delivery = Delivery.includes(enrollment: :campaign).find(delivery_id)
return unless prepare?(delivery)
message = RailsDrips.configuration.mailers.fetch(delivery.email_key).call(delivery).message
message = RailsDrips.configuration.transport_metadata_hook.call(message: message, delivery: delivery)
snapshot = MailSnapshot.call(message)
delivery.with_lock do
return unless delivery.scheduled?
delivery.update!(
subject_snapshot: snapshot[:subject],
html_body_snapshot: snapshot[:html_body],
text_body_snapshot: snapshot[:text_body],
data: delivery.data_value.merge("message_sha256" => snapshot[:sha256], "message_byte_size" => snapshot[:byte_size])
)
delivery.mark_sending!
end
message.deliver
delivery.with_lock do
delivery.mark_sent!(provider: "action_mailer", provider_message_id: message.message_id)
RecordEvent.call(enrollment: delivery.enrollment, event_type: "delivery_sent",
data: { "delivery_id" => delivery.id, "step_id" => delivery.step_id })
end
CompleteEnrollment.call(enrollment: delivery.enrollment)
Instrumentation.instrument("delivery.sent", delivery_id: delivery.id,
enrollment_id: delivery.enrollment_id, campaign_key: delivery.campaign_key)
rescue ActiveRecord::RecordNotFound
nil
rescue StandardError => error
record_failure(delivery, error) if delivery
raise
end
|