diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index f220d1a..412386e 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -277,7 +277,7 @@ public function testContactConfigEntityTranslation() {
     $label = 'Send your feedback';
     $edit = array(
       'label' => $label,
-      'recipients' => 'sales@example.com,support@example.com',
+      'recipients' => implode("\n", ['sales@example.com', 'support@example.com']),
       'reply' => 'Thank you for your mail',
     );
     $this->drupalPostForm('admin/structure/contact/manage/feedback', $edit, t('Save'));
diff --git a/core/modules/contact/src/ContactFormEditForm.php b/core/modules/contact/src/ContactFormEditForm.php
index c545b0e..e278f3e 100644
--- a/core/modules/contact/src/ContactFormEditForm.php
+++ b/core/modules/contact/src/ContactFormEditForm.php
@@ -84,8 +84,8 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['recipients'] = array(
       '#type' => 'textarea',
       '#title' => $this->t('Recipients'),
-      '#default_value' => implode(', ', $contact_form->getRecipients()),
-      '#description' => $this->t("Example: 'webmaster@example.com' or 'sales@example.com,support@example.com' . To specify multiple recipients, separate each email address with a comma."),
+      '#default_value' => implode("\n", $contact_form->getRecipients()),
+      '#description' => $this->t("Example: 'support@example.com' or 'sales@example.com'. To specify multiple recipients, separate each email address on a new line."),
       '#required' => TRUE,
     );
     $form['reply'] = array(
@@ -116,11 +116,12 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
     parent::validateForm($form, $form_state);
 
     // Validate and each email recipient.
-    $recipients = explode(',', $form_state->getValue('recipients'));
+    $recipients = explode("\n", $form_state->getValue('recipients'));
 
     foreach ($recipients as &$recipient) {
       $recipient = trim($recipient);
-      if (!$this->emailValidator->isValid($recipient)) {
+      // Do not check empty lines.
+      if ($recipient && !$this->emailValidator->isValid($recipient)) {
         $form_state->setErrorByName('recipients', $this->t('%recipient is an invalid email address.', array('%recipient' => $recipient)));
       }
     }
diff --git a/core/modules/contact/src/ContactFormListBuilder.php b/core/modules/contact/src/ContactFormListBuilder.php
index 4ba3b36..a503ee2 100644
--- a/core/modules/contact/src/ContactFormListBuilder.php
+++ b/core/modules/contact/src/ContactFormListBuilder.php
@@ -10,7 +10,6 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Link;
 
 /**
  * Defines a class to build a listing of contact form entities.
@@ -23,9 +22,12 @@ class ContactFormListBuilder extends ConfigEntityListBuilder {
    * {@inheritdoc}
    */
   public function buildHeader() {
-    $header['form'] = t('Form');
-    $header['recipients'] = t('Recipients');
-    $header['selected'] = t('Selected');
+    $header['form'] = $this->t('Form');
+    $header['recipients'] = [
+      'data' => $this->t('Recipients'),
+      'class' => [RESPONSIVE_PRIORITY_LOW],
+    ];
+    $header['selected'] = $this->t('Selected');
     return $header + parent::buildHeader();
   }
 
@@ -36,18 +38,28 @@ public function buildRow(EntityInterface $entity) {
     // Special case the personal form.
     if ($entity->id() == 'personal') {
       $row['form'] = $this->getLabel($entity);
-      $row['recipients'] = t('Selected user');
-      $row['selected'] = t('No');
+      $row['recipients'] = $this->t('Selected user');
+      $row['selected'] = $this->t('No');
     }
     else {
       $row['form'] = $entity->link(NULL, 'canonical');
-      $row['recipients']['data'] = [
-        '#theme' => 'item_list',
-        '#items' => $entity->getRecipients(),
-        '#context' => ['list_style' => 'comma-list'],
-      ];
+      // Filter empty lines.
+      $recipients = array_filter($entity->getRecipients());
+      if (count($recipients) > 1) {
+        $row['recipients']['data'] = [
+          '#theme' => 'item_list',
+          '#items' => $recipients,
+        ];
+      }
+      elseif (count($recipients)) {
+        // Only one recipient.
+        $row['recipients']['data']['#markup'] = $recipients[0];
+      }
+      else {
+        $row['recipients'] = $this->t('No recipients');
+      }
       $default_form = \Drupal::config('contact.settings')->get('default_form');
-      $row['selected'] = ($default_form == $entity->id() ? t('Yes') : t('No'));
+      $row['selected'] = ($default_form == $entity->id() ? $this->t('Yes') : $this->t('No'));
     }
     return $row + parent::buildRow($entity);
   }
diff --git a/core/modules/contact/src/MailHandler.php b/core/modules/contact/src/MailHandler.php
index 308acf5..026e0ac 100644
--- a/core/modules/contact/src/MailHandler.php
+++ b/core/modules/contact/src/MailHandler.php
@@ -102,7 +102,7 @@ public function sendMailMessages(MessageInterface $message, AccountInterface $se
       // Send to the form recipient(s), using the site's default language.
       $params['contact_form'] = $contact_form;
 
-      $to = implode(', ', $contact_form->getRecipients());
+      $to = implode(', ', array_filter($contact_form->getRecipients()));
     }
     elseif ($recipient = $message->getPersonalRecipient()) {
       // Send to the user in the user's preferred language.
diff --git a/core/modules/contact/src/Tests/ContactSitewideTest.php b/core/modules/contact/src/Tests/ContactSitewideTest.php
index 1ab942b..fa254c6 100644
--- a/core/modules/contact/src/Tests/ContactSitewideTest.php
+++ b/core/modules/contact/src/Tests/ContactSitewideTest.php
@@ -129,11 +129,11 @@ function testSiteWideContact() {
     $max_length_exceeded = $max_length + 1;
     $this->addContactForm($id = Unicode::strtolower($this->randomMachineName($max_length_exceeded)), $label = $this->randomMachineName($max_length_exceeded), implode(',', array($recipients[0])), '', TRUE);
     $this->assertText(format_string('Machine-readable name cannot be longer than !max characters but is currently !exceeded characters long.', array('!max' => $max_length, '!exceeded' => $max_length_exceeded)));
-    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName($max_length)), $label = $this->randomMachineName($max_length), implode(',', array($recipients[0])), '', TRUE);
+    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName($max_length)), $label = $this->randomMachineName($max_length), $recipients[0], '', TRUE);
     $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
 
     // Create first valid form.
-    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode(',', array($recipients[0])), '', TRUE);
+    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), $recipients[0], '', TRUE);
     $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
 
     // Check that the form was created in site default language.
@@ -149,10 +149,12 @@ function testSiteWideContact() {
     $this->assertEscaped($recipients[0]);
 
     // Test update contact form.
-    $this->updateContactForm($id, $label = $this->randomMachineName(16), $recipients_str = implode(',', array($recipients[0], $recipients[1])), $reply = $this->randomMachineName(30), FALSE);
+    // Make sure we allow empty lines between recipients.
+    $new_recipients = array($recipients[0], '', $recipients[1]);
+    $this->updateContactForm($id, $label = $this->randomMachineName(16), $recipients_str = implode("\n", $new_recipients), $reply = $this->randomMachineName(30), FALSE);
     $config = $this->config('contact.form.' . $id)->get();
     $this->assertEqual($config['label'], $label);
-    $this->assertEqual($config['recipients'], array($recipients[0], $recipients[1]));
+    $this->assertEqual($config['recipients'], $new_recipients);
     $this->assertEqual($config['reply'], $reply);
     $this->assertNotEqual($id, $this->config('contact.settings')->get('default_form'));
     $this->assertRaw(t('Contact form %label has been updated.', array('%label' => $label)));
@@ -172,10 +174,10 @@ function testSiteWideContact() {
     $this->drupalLogin($admin_user);
 
     // Add more forms.
-    $this->addContactForm(Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode(',', array($recipients[0], $recipients[1])), '', FALSE);
+    $this->addContactForm(Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode("\n", array($recipients[0], $recipients[1])), '', FALSE);
     $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
 
-    $this->addContactForm($name = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode(',', array($recipients[0], $recipients[1], $recipients[2])), '', FALSE);
+    $this->addContactForm($name = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode("\n", array($recipients[0], $recipients[1], $recipients[2])), '', FALSE);
     $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
 
     // Try adding a form that already exists.
@@ -243,7 +245,7 @@ function testSiteWideContact() {
     $this->deleteContactForms();
 
     $label = $this->randomMachineName(16);
-    $recipients = implode(',', array($recipients[0], $recipients[1], $recipients[2]));
+    $recipients = implode("\n", array($recipients[0], $recipients[1], $recipients[2]));
     $contact_form = Unicode::strtolower($this->randomMachineName(16));
     $this->addContactForm($contact_form, $label, $recipients, '', FALSE);
     $this->drupalGet('admin/structure/contact');
@@ -352,7 +354,7 @@ function testAutoReply() {
    * @param string $label
    *   The form label.
    * @param string $recipients
-   *   The list of recipient email addresses.
+   *   The list of recipient email addresses separated by new line.
    * @param string $reply
    *   The auto-reply text that is sent to a user upon completing the contact
    *   form.
diff --git a/core/modules/contact/src/Tests/ContactStorageTest.php b/core/modules/contact/src/Tests/ContactStorageTest.php
index 5d62e10..2704e78 100644
--- a/core/modules/contact/src/Tests/ContactStorageTest.php
+++ b/core/modules/contact/src/Tests/ContactStorageTest.php
@@ -51,7 +51,7 @@ public function testContactStorage() {
     $this->drupalLogin($admin_user);
     // Create first valid contact form.
     $mail = 'simpletest@example.com';
-    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), implode(',', array($mail)), '', TRUE, [
+    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), $mail, '', TRUE, [
       'send_a_pony' => 1,
     ]);
     $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
