@@ -77,9 +77,6 @@ public function process(Job $job): JobResult {
77
77
$ payload = $ job ->getPayload ();
78
78
$ message = json_decode ($ payload ['message ' ], TRUE );
79
79
80
- // Load the Webform submission entity by ID.
81
- $ submission = WebformSubmission::load ($ payload ['submissionId ' ]);
82
-
83
80
// Gather filenames for os2forms attachments for deletion later.
84
81
$ os2formsAttachmentFilenames = [];
85
82
@@ -88,10 +85,15 @@ public function process(Job $job): JobResult {
88
85
// Handle OS2Forms attachments.
89
86
if (isset ($ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ])) {
90
87
$ os2formsAttachmentFilenames [] = $ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ];
88
+
89
+ if (FALSE === file_exists ($ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ])) {
90
+ throw new \Exception ('OS2Forms attachment file not found: ' . $ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ]);
91
+ }
92
+
91
93
$ attachment [self ::FILECONTENT ] = file_get_contents ($ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ]);
92
94
93
95
if (FALSE === $ attachment [self ::FILECONTENT ]) {
94
- throw new \Exception ('OS2Forms attachment file not found : ' . $ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ]);
96
+ throw new \Exception ('OS2Forms attachment file cannot be read : ' . $ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ]);
95
97
}
96
98
97
99
unset($ attachment [self ::OS2FORMS_QUEUED_EMAIL_CONFIG_NAME ]);
@@ -110,42 +112,56 @@ public function process(Job $job): JobResult {
110
112
111
113
}
112
114
113
- $ this ->mailManager ->createInstance ('SMTPMailSystem ' )->mail ($ message );
115
+ $ result = $ this ->mailManager ->createInstance ('SMTPMailSystem ' )->mail ($ message );
114
116
115
- $ logger_context = [
116
- 'handler_id ' => 'os2forms_queued_email ' ,
117
- 'channel ' => 'webform_submission ' ,
118
- 'webform_submission ' => $ submission ,
119
- 'operation ' => 'email sent ' ,
120
- ];
117
+ // Logging of failed mail is handled in catch.
118
+ if (!$ result ) {
119
+ throw new \Exception ('Failed sending email ' );
120
+ }
121
121
122
- $ this ->submissionLogger ->notice ($ this ->t ('The submission #@serial was successfully delivered ' , ['@serial ' => $ submission ->serial ()]), $ logger_context );
122
+ // Load the Webform submission entity by ID.
123
+ // Be aware that some webforms may be configured to NOT save submissions,
124
+ // submission may therefore be null.
125
+ $ submission = WebformSubmission::load ($ payload ['submissionId ' ]);
126
+
127
+ if ($ submission ) {
128
+ $ logger_context = [
129
+ 'handler_id ' => 'os2forms_queued_email ' ,
130
+ 'channel ' => 'webform_submission ' ,
131
+ 'webform_submission ' => $ submission ,
132
+ 'operation ' => 'email sent ' ,
133
+ ];
134
+
135
+ $ this ->submissionLogger ->notice ($ this ->t ('The submission #@serial was successfully delivered ' , ['@serial ' => $ submission ->serial ()]), $ logger_context );
136
+ }
123
137
124
138
// Remove OS2Forms attachments.
125
139
foreach ($ os2formsAttachmentFilenames as $ os2formsAttachmentFilename ) {
126
140
unlink ($ os2formsAttachmentFilename );
127
141
}
128
142
129
- $ msg = sprintf ('Email, %s, sent to %s. Webform id: %s. ' , $ message ['subject ' ], $ message ['to ' ], $ submission -> getWebform ()-> id () );
143
+ $ msg = sprintf ('Email, %s, sent to %s. Webform id: %s. ' , $ payload ['subject ' ] ?? NULL , $ payload ['to ' ] ?? NULL , $ payload [ ' webformId ' ] ?? NULL );
130
144
$ this ->auditLogger ->info ('Email ' , $ msg );
131
145
132
146
return JobResult::success ();
133
147
}
134
148
catch (\Exception $ e ) {
135
149
136
- $ submission = $ payload ['submissionId ' ] ? WebformSubmission::load ($ payload ['submissionId ' ]) : NULL ;
137
-
138
- $ logger_context = [
139
- 'handler_id ' => 'os2forms_queued_email ' ,
140
- 'channel ' => 'webform_submission ' ,
141
- 'webform_submission ' => $ submission ,
142
- 'operation ' => 'email failed ' ,
143
- ];
150
+ $ submission = WebformSubmission::load ($ payload ['submissionId ' ]);
144
151
145
- $ this ->submissionLogger ->error ($ this ->t ('The submission #@serial failed (@message) ' , [
146
- '@serial ' => $ submission ?->serial(),
147
- '@message ' => $ e ->getMessage (),
148
- ]), $ logger_context );
152
+ if ($ submission ) {
153
+ $ logger_context = [
154
+ 'handler_id ' => 'os2forms_queued_email ' ,
155
+ 'channel ' => 'webform_submission ' ,
156
+ 'webform_submission ' => $ submission ,
157
+ 'operation ' => 'email failed ' ,
158
+ ];
159
+
160
+ $ this ->submissionLogger ->error ($ this ->t ('The submission #@serial failed (@message) ' , [
161
+ '@serial ' => $ submission ->serial (),
162
+ '@message ' => $ e ->getMessage (),
163
+ ]), $ logger_context );
164
+ }
149
165
150
166
return JobResult::failure ($ e ->getMessage ());
151
167
}
0 commit comments