@@ -24,11 +24,12 @@ def initialize(current_context:, email_confirmation_input:, mode:)
2424
2525 def submit
2626 ensure_form_english
27+
2728 validate_submission
29+ validate_confirmation_email_address if requested_confirmation?
2830
29- confirmation_mail = setup_confirmation_email if requested_confirmation?
30- deliver_submission
31- send_confirmation_email ( confirmation_mail ) if confirmation_mail . present?
31+ submission = deliver_submission
32+ enqueue_send_confirmation_email_job ( submission :) if requested_confirmation?
3233
3334 submission_reference
3435 end
@@ -58,14 +59,15 @@ def validate_submission
5859 end
5960
6061 def deliver_submission
61- case form . submission_type
62- when "s3"
63- enqueue_deliver_submission_job ( SendS3SubmissionJob )
64- when "email"
65- enqueue_deliver_submission_job ( SendSubmissionJob )
66- else
67- raise "unrecognized submission delivery method #{ form . submission_type . inspect } "
68- end
62+ submission =
63+ case form . submission_type
64+ when "s3"
65+ enqueue_deliver_submission_job ( SendS3SubmissionJob )
66+ when "email"
67+ enqueue_deliver_submission_job ( SendSubmissionJob )
68+ else
69+ raise "unrecognized submission delivery method #{ form . submission_type . inspect } "
70+ end
6971
7072 LogEventService . log_submit (
7173 current_context ,
@@ -74,6 +76,8 @@ def deliver_submission
7476 submission_type : form . submission_type ,
7577 submission_format : form . submission_format ,
7678 )
79+
80+ submission
7781 end
7882
7983 def create_submission_record
@@ -102,47 +106,38 @@ def enqueue_deliver_submission_job(job_class)
102106 message_suffix = ": #{ job . enqueue_error &.message } " if job . enqueue_error
103107 raise StandardError , "Failed to enqueue submission for reference #{ submission_reference } #{ message_suffix } "
104108 end
109+
110+ submission
105111 end
106112
107113 def submission_timestamp
108114 time_zone = Rails . configuration . x . submission . time_zone || "UTC"
109115 Time . use_zone ( time_zone ) { Time . zone . now }
110116 end
111117
112- def setup_confirmation_email
113- mail = FormSubmissionConfirmationMailer . send_confirmation_email (
114- what_happens_next_markdown : form . what_happens_next_markdown ,
115- support_contact_details : form . support_details ,
116- notify_response_id : email_confirmation_input . confirmation_email_reference ,
117- confirmation_email_address : email_confirmation_input . confirmation_email_address ,
118- mailer_options :,
119- )
118+ def validate_confirmation_email_address
119+ mail = Mail . new ( to : email_confirmation_input . confirmation_email_address )
120+ to_address_error = mail . errors . select { |error | error [ 0 ] == "To" } . first
121+ return unless to_address_error
120122
121- if mail . message . errors . any?
122- to_address_error = mail . message . errors . select { |error | error [ 0 ] == "To" } . first
123- if to_address_error
124- redacted_error = redact_emails_from_sentry_message ( to_address_error [ 2 ] . to_s )
125- Sentry . capture_message ( "ActionMailer error for To email address in confirmation email" , extra : {
126- action_mailer_error : redacted_error ,
127- } )
128- raise ConfirmationEmailToAddressError
129- end
130- end
131-
132- mail
123+ redacted_error = redact_emails_from_sentry_message ( to_address_error [ 2 ] . to_s )
124+ Sentry . capture_message ( "ActionMailer error for To email address in confirmation email" , extra : {
125+ action_mailer_error : redacted_error ,
126+ } )
127+ raise ConfirmationEmailToAddressError
133128 end
134129
135- def send_confirmation_email ( mail )
136- mail . deliver_now
137- CurrentRequestLoggingAttributes . confirmation_email_id = mail . govuk_notify_response . id
138- end
130+ def enqueue_send_confirmation_email_job ( submission :)
131+ SendConfirmationEmailJob . perform_later (
132+ submission :,
133+ notify_response_id : email_confirmation_input . confirmation_email_reference ,
134+ confirmation_email_address : email_confirmation_input . confirmation_email_address ,
135+ ) do |job |
136+ next if job . successfully_enqueued?
139137
140- def mailer_options
141- MailerOptions . new ( title : form . name ,
142- is_preview : mode . preview? ,
143- timestamp : timestamp ,
144- submission_reference : submission_reference ,
145- payment_url : form . payment_url_with_reference ( submission_reference ) )
138+ message_suffix = ": #{ job . enqueue_error &.message } " if job . enqueue_error
139+ raise StandardError , "Failed to enqueue confirmation email for reference #{ submission_reference } #{ message_suffix } "
140+ end
146141 end
147142
148143 def requested_confirmation?
0 commit comments