diff --git a/config/schema/inmail.schema.yml b/config/schema/inmail.schema.yml index ea65eb5..b9ebf57 100644 --- a/config/schema/inmail.schema.yml +++ b/config/schema/inmail.schema.yml @@ -67,6 +67,9 @@ inmail.deliverer.*: configuration: label: 'Configuration' type: inmail.plugin.deliverer.[%parent.plugin] + message_report: + label: 'Message report' + type: boolean # Empty default configuration schema inmail.plugin.analyzer.*: diff --git a/inmail.module b/inmail.module index 873d2a2..4baded7 100644 --- a/inmail.module +++ b/inmail.module @@ -319,6 +319,17 @@ function inmail_mail($key, &$message, $params) { $header->addField('X-Inmail-Forwarded', 'handler_moderator_forward'); $message['raw_headers'] = $header; break; + case 'success': + /** @var \Drupal\contact\MessageInterface $original */ + $original = $params['original']; + $message['subject'] = 'Re: ' . $original->getSubject(); + $message['from'] = \Drupal::config('system.site')->get('mail'); + $message['headers']['message-id'] = $original->getMessageId(); + // Set the mail body. + $body [] = 'The message has been processed successfully.'; + //TODO: Add log messages in body https://www.drupal.org/node/2822320 + $message['body'] = $body; + break; } } diff --git a/src/Entity/DelivererConfig.php b/src/Entity/DelivererConfig.php index 46ee2a0..0dc43ad 100644 --- a/src/Entity/DelivererConfig.php +++ b/src/Entity/DelivererConfig.php @@ -32,6 +32,7 @@ use Drupal\inmail\DelivererConfigInterface; * "label", * "plugin", * "configuration", + * "message_report", * }, * links = { * "edit-form" = "/admin/config/system/inmail/analyzers/{inmail_deliverer}", @@ -49,4 +50,29 @@ class DelivererConfig extends PluginConfigEntity implements DelivererConfigInter */ protected $pluginType = 'deliverer'; + /** + * The enabled/disabled status of the messageReporter. + * + * @var bool + */ + protected $message_report = FALSE; + + /** + * Set the flag to message reporter. + * + * @param bool $messageReport + * Flag of message reporter. + */ + public function setMessageReport($messageReport) { + $this->message_report = $messageReport; + } + + /** + * Returns the flag for message report. + * + * @return bool + */ + public function isMessageReport() { + return $this->message_report; + } } diff --git a/src/Form/DelivererConfigurationForm.php b/src/Form/DelivererConfigurationForm.php index b0df2d1..d291dbd 100644 --- a/src/Form/DelivererConfigurationForm.php +++ b/src/Form/DelivererConfigurationForm.php @@ -35,4 +35,22 @@ class DelivererConfigurationForm extends PluginConfigurationForm { $form_state->setRedirect('entity.inmail_deliverer.collection'); } + /** + * {@inheritdoc} + */ + public function buildForm(array $form, FormStateInterface $form_state) { + $form = parent::buildForm($form, $form_state); + $entity = $this->getEntity(); + + $form['message_report'] = [ + '#title' => $this->t('Mail processing report to sender.'), + '#type' => 'checkbox', + '#default_value' => $entity->isMessageReport(), + ]; + + return $form; + + } + + } diff --git a/src/MessageProcessor.php b/src/MessageProcessor.php index cd93b21..ae5ff0e 100644 --- a/src/MessageProcessor.php +++ b/src/MessageProcessor.php @@ -168,6 +168,18 @@ class MessageProcessor implements MessageProcessorInterface { } } $result->success($key); + + // Send message report. + //TODO: Skip bounce mails. + if ($deliverer->isMessageReport()) { + // Trigger result transition mail. + $params['result'] = $result; + $params['original'] = $message; + // Sending message. + $recipient = $message->getFrom(); + $mail_manager = \Drupal::service('plugin.manager.mail'); + $mail_manager->mail('inmail', 'success', $recipient, \Drupal::languageManager()->getDefaultLanguage()->getId(), $params); + } } catch (ParseException $e) { // Set event message if parsing the message fails. diff --git a/tests/src/Kernel/ModeratorForwardTest.php b/tests/src/Kernel/ModeratorForwardTest.php index fa3c87c..7402149 100644 --- a/tests/src/Kernel/ModeratorForwardTest.php +++ b/tests/src/Kernel/ModeratorForwardTest.php @@ -94,6 +94,17 @@ class ModeratorForwardTest extends KernelTestBase { $processor->process('unique_key', $regular_x, $deliverer); $this->assertSuccess($deliverer, 'unique_key'); $this->assertMailCount(0); + $processor->process('unique_key', $regular_x, $deliverer); + // Check message_report + $this->assertMailCount(0); + $deliverer->setMessageReport(1); + $processor->process('unique_key', $regular_x,$deliverer); + $this->assertMailCount(1); + $mails = $this->getMails(); + $last_mail = $mails[0]; + $this->assertEquals('bounces@example.com', $last_mail['from']); + $this->assertEquals('Re: BMH testing sample', $last_mail['subject']); + $this->assertEquals('The message has been processed successfully.', $last_mail['body']); // Again check past event log. $events = \Drupal::entityTypeManager()->getStorage('past_event')->loadMultiple(); @@ -107,7 +118,8 @@ class ModeratorForwardTest extends KernelTestBase { $deliverer = $this->createTestDeliverer(); $processor->process('unique_key', $regular, $deliverer); $this->assertSuccess($deliverer, 'unique_key'); - $this->assertMailCount(1); + $this->assertMailCount(2); + } /**