diff --git a/core/modules/contact/src/MailHandler.php b/core/modules/contact/src/MailHandler.php
index 308acf5..67646b0 100644
--- a/core/modules/contact/src/MailHandler.php
+++ b/core/modules/contact/src/MailHandler.php
@@ -23,6 +23,16 @@ class MailHandler implements MailHandlerInterface {
   use StringTranslationTrait;
 
   /**
+   * Index to identify the result of the message recipient.
+   */
+  const MESSAGE_RECIPIENT = 'recipient';
+
+  /**
+   * Index to identify the result of the message copy.
+   */
+  const MESSAGE_COPY = 'copy';
+
+  /**
    * Language manager service.
    *
    * @var \Drupal\Core\Language\LanguageManagerInterface
@@ -116,15 +126,15 @@ public function sendMailMessages(MessageInterface $message, AccountInterface $se
 
     // Send email to the recipient(s).
     $key_prefix = $message->isPersonal() ? 'user' : 'page';
-    $this->mailManager->mail('contact', $key_prefix . '_mail', $to, $recipient_langcode, $params, $sender_cloned->getEmail());
+    $message_results[MailHandler::MESSAGE_RECIPIENT] = $this->mailManager->mail('contact', $key_prefix . '_mail', $to, $recipient_langcode, $params, $sender_cloned->getEmail());
 
     // If requested, send a copy to the user, using the current language.
-    if ($message->copySender()) {
-      $this->mailManager->mail('contact', $key_prefix . '_copy', $sender_cloned->getEmail(), $current_langcode, $params, $sender_cloned->getEmail());
+    if ($message->copySender() && $message_results[MailHandler::MESSAGE_RECIPIENT]['result']) {
+      $message_results[MailHandler::MESSAGE_COPY] = $this->mailManager->mail('contact', $key_prefix . '_copy', $sender_cloned->getEmail(), $current_langcode, $params, $sender_cloned->getEmail());
     }
 
     // If configured, send an auto-reply, using the current language.
-    if (!$message->isPersonal() && $contact_form->getReply()) {
+    if (!$message->isPersonal() && $contact_form->getReply() && $message_results[MailHandler::MESSAGE_RECIPIENT]['result']) {
       // User contact forms do not support an auto-reply message, so this
       // message always originates from the site.
       $this->mailManager->mail('contact', 'page_autoreply', $sender_cloned->getEmail(), $current_langcode, $params);
@@ -144,6 +154,8 @@ public function sendMailMessages(MessageInterface $message, AccountInterface $se
         '%recipient-name' => $message->getPersonalRecipient()->getUsername(),
       ));
     }
+
+    return $message_results;
   }
 
 }
diff --git a/core/modules/contact/src/MessageForm.php b/core/modules/contact/src/MessageForm.php
index 78de6dd..1de2b8e 100644
--- a/core/modules/contact/src/MessageForm.php
+++ b/core/modules/contact/src/MessageForm.php
@@ -212,10 +212,25 @@ public function validate(array $form, FormStateInterface $form_state) {
   public function save(array $form, FormStateInterface $form_state) {
     $message = $this->entity;
     $user = $this->currentUser();
-    $this->mailHandler->sendMailMessages($message, $user);
+    $message_results = $this->mailHandler->sendMailMessages($message, $user);
+
+    if ($message_results[MailHandler::MESSAGE_RECIPIENT]['result']) {
+      drupal_set_message($this->t('Your message has been sent.'));
+    }
+    else {
+      drupal_set_message($this->t('Your message has not been sent.'), 'error');
+    }
+
+    if (isset($message_results[MailHandler::MESSAGE_COPY])) {
+      if (!$message_results[MailHandler::MESSAGE_COPY]['result']) {
+        drupal_set_message($this->t('Your message copy has been sent.'));
+      }
+      else {
+        drupal_set_message($this->t('Your message copy has not been sent.'), 'error');
+      }
+    }
 
     $this->flood->register('contact', $this->config('contact.settings')->get('flood.interval'));
-    drupal_set_message($this->t('Your message has been sent.'));
 
     // To avoid false error messages caused by flood control, redirect away from
     // the contact form; either to the contacted user account or the front page.
diff --git a/core/modules/contact/src/Tests/NotExistEmailContactTest.php b/core/modules/contact/src/Tests/NotExistEmailContactTest.php
new file mode 100644
index 0000000..a84c3ed
--- /dev/null
+++ b/core/modules/contact/src/Tests/NotExistEmailContactTest.php
@@ -0,0 +1,128 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\contact\Tests\NotExistEmailContactTest.
+ */
+
+namespace Drupal\contact\Tests;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\contact\Entity\ContactForm;
+use Drupal\Core\Mail\MailFormatHelper;
+use Drupal\field_ui\Tests\FieldUiTestTrait;
+use Drupal\simpletest\WebTestBase;
+use Drupal\Core\Entity\EntityTypeInterface;
+
+/**
+ * Reproduces Contact Form Bug https://www.drupal.org/node/2348119
+ *
+ * @group contact
+ */
+class NotExistEmailContactTest extends WebTestBase {
+
+  use FieldUiTestTrait;
+
+  /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('text', 'contact', 'contact_test', 'field_ui', 'system_mail_failure_test');
+
+  protected function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests messages displyed when can't send contact mail.
+   */
+  function testPersonalContactFail() {
+    // Create a valid form.
+    $this->admin_user = $this->drupalCreateUser(array('access site-wide contact form', 'administer contact forms', 'administer permissions', 'administer users'));
+
+    $this->drupalLogin($this->admin_user);
+    $this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), "mailnoexist@done1ec.com", '', TRUE);
+    $this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
+
+    // Make sure that we can't send mails.
+    $this->config('system.mail')->set('interface.default', 'test_php_mail_failure')->save();
+
+    // Submit the contact form.
+    $this->drupalLogout();
+    $this->drupalGet('/contact');
+    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
+    $this->submitContact("Test", "test@example.com", "Sample Message", $id, "Just a sample message");
+
+    // Unable to send email message should be displayed, but not the your
+    // message has been sent message.
+    $this->assertText(t('Unable to send email. Contact the site administrator if the problem persists.'), 'Displayed "Unable to send email..."');
+    $this->assertNoText(t('Your message has been sent.'), 'Did not display "Message sent"');
+  }
+
+  /**
+   * Adds a form.
+   *
+   * @param string $id
+   *   The form machine name.
+   * @param string $label
+   *   The form label.
+   * @param string $recipients
+   *   The list of recipient email addresses.
+   * @param string $reply
+   *   The auto-reply text that is sent to a user upon completing the contact
+   *   form.
+   * @param boolean $selected
+   *   A Boolean indicating whether the form should be selected by default.
+   * @param array $third_party_settings
+   *   Array of third party settings to be added to the posted form data.
+   */
+  function addContactForm($id, $label, $recipients, $reply, $selected, $third_party_settings = []) {
+    $edit = array();
+    $edit['label'] = $label;
+    $edit['id'] = $id;
+    $edit['recipients'] = $recipients;
+    $edit['reply'] = $reply;
+    $edit['selected'] = ($selected ? TRUE : FALSE);
+    $edit += $third_party_settings;
+    $this->drupalPostForm('admin/structure/contact/add', $edit, t('Save'));
+  }
+
+  /**
+   * Submits the contact form.
+   *
+   * @param string $name
+   *   The name of the sender.
+   * @param string $mail
+   *   The email address of the sender.
+   * @param string $subject
+   *   The subject of the message.
+   * @param string $id
+   *   The form ID of the message.
+   * @param string $message
+   *   The message body.
+   */
+  function submitContact($name, $mail, $subject, $id, $message) {
+    $edit = array();
+    $edit['name'] = $name;
+    $edit['mail'] = $mail;
+    $edit['subject[0][value]'] = $subject;
+    $edit['message[0][value]'] = $message;
+    if ($id == \Drupal::config('contact.settings')->get('default_form')) {
+      $this->drupalPostForm('contact', $edit, t('Send message'));
+    }
+    else {
+      $this->drupalPostForm('contact/' . $id, $edit, t('Send message'));
+    }
+  }
+
+}
