diff --git a/core/lib/Drupal/Core/Action/Plugin/Action/EmailAction.php b/core/lib/Drupal/Core/Action/Plugin/Action/EmailAction.php
index 2a675fb990..6af7f52c86 100644
--- a/core/lib/Drupal/Core/Action/Plugin/Action/EmailAction.php
+++ b/core/lib/Drupal/Core/Action/Plugin/Action/EmailAction.php
@@ -190,9 +190,15 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
    * {@inheritdoc}
    */
   public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
-    if (!$this->emailValidator->isValid($form_state->getValue('recipient')) && strpos($form_state->getValue('recipient'), ':mail') === FALSE) {
-      // We want the literal %author placeholder to be emphasized in the error message.
-      $form_state->setErrorByName('recipient', $this->t('Enter a valid email address or use a token email address such as %author.', ['%author' => '[node:author:mail]']));
+    $recipients = explode(',', $form_state->getValue('recipient'));
+    $recipients = array_filter(array_map('trim', $recipients));
+    foreach ($recipients as $recipient) {
+      if (!$this->emailValidator->isValid($recipient) && strpos($recipient, ':mail') === FALSE) {
+        // We want the literal %author placeholder to be emphasized in the error message.
+        $form_state->setErrorByName('recipient', $this->t('Enter a valid email address or use a token email address such as %author.', [
+        '%author' => '[node:author:mail]',
+      ]));
+      }
     }
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Action/EmailActionTest.php b/core/tests/Drupal/KernelTests/Core/Action/EmailActionTest.php
index 81d8aad895..5c898f997f 100644
--- a/core/tests/Drupal/KernelTests/Core/Action/EmailActionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Action/EmailActionTest.php
@@ -62,4 +62,39 @@ public function testEmailAction() {
     $this->assertEquals('test@example.com', $variables['%recipient']);
   }
 
+  /**
+   * Tests multiple recipient email action plugin.
+   */
+  public function testMultipleRecipientsEmailAction() {
+    /** @var \Drupal\Core\Action\ActionManager $plugin_manager */
+    $plugin_manager = $this->container->get('plugin.manager.action');
+    $configuration = [
+      'recipient' => 'test@example.com, test+2@example.com, test+3@example.com',
+      'subject' => 'Test subject',
+      'message' => 'Test message',
+    ];
+    $plugin_manager
+      ->createInstance('action_send_email_action', $configuration)
+      ->execute();
+
+    $mails = $this->getMails();
+    $this->assertCount(1, $this->getMails());
+    $this->assertEquals('test@example.com, test+2@example.com, test+3@example.com', $mails[0]['to']);
+    $this->assertEquals('Test subject', $mails[0]['subject']);
+    $this->assertEquals("Test message\n", $mails[0]['body']);
+
+    // Ensure that the email sending is logged.
+    $log = \Drupal::database()
+      ->select('watchdog', 'w')
+      ->fields('w', ['message', 'variables'])
+      ->orderBy('wid', 'DESC')
+      ->range(0, 1)
+      ->execute()
+      ->fetch();
+
+    $this->assertEquals('Sent email to %recipient', $log->message);
+    $variables = unserialize($log->variables);
+    $this->assertEquals('test@example.com, test+2@example.com, test+3@example.com', $variables['%recipient']);
+  }
+
 }
