diff --git a/core/modules/contact/src/MailHandler.php b/core/modules/contact/src/MailHandler.php
index aae2793755..161cbaac6b 100644
--- a/core/modules/contact/src/MailHandler.php
+++ b/core/modules/contact/src/MailHandler.php
@@ -17,6 +17,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.
    *
@@ -111,15 +121,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.
       if (!$sender_cloned->getEmail()) {
@@ -146,6 +156,8 @@ public function sendMailMessages(MessageInterface $message, AccountInterface $se
         '%recipient-name' => $message->getPersonalRecipient()->getAccountName(),
       ]);
     }
+
+    return $message_results;
   }
 
 }
diff --git a/core/modules/contact/src/MailHandlerInterface.php b/core/modules/contact/src/MailHandlerInterface.php
index 6525ef3208..c41a145019 100644
--- a/core/modules/contact/src/MailHandlerInterface.php
+++ b/core/modules/contact/src/MailHandlerInterface.php
@@ -24,6 +24,11 @@
    *
    * @throws \Drupal\contact\MailHandlerException
    *   When unable to determine message recipient.
+   *
+   * @return array
+   *   Array with keys of MailHandler::MESSAGE_RECIPIENT and optionally
+   *   MailHandler::MESSAGE_COPY if a copy is sent, containing the boolean
+   *   result of the mails being sent.
    */
   public function sendMailMessages(MessageInterface $message, AccountInterface $sender);
 
diff --git a/core/modules/contact/src/MessageForm.php b/core/modules/contact/src/MessageForm.php
index f273e52cf0..c401b7489c 100644
--- a/core/modules/contact/src/MessageForm.php
+++ b/core/modules/contact/src/MessageForm.php
@@ -219,11 +219,14 @@ public function save(array $form, FormStateInterface $form_state) {
     // implement message storage, this will make the task of swapping in a real
     // storage controller straight-forward.
     $message->save();
-    $this->mailHandler->sendMailMessages($message, $user);
+    $message_results = $this->mailHandler->sendMailMessages($message, $user);
     $contact_form = $message->getContactForm();
 
     $this->flood->register('contact', $this->config('contact.settings')->get('flood.interval'));
-    if ($submission_message = $contact_form->getMessage()) {
+    $submission_message = $contact_form->getMessage();
+    // \Drupal\Core\Mail\MailManager will display an error message if the
+    // message couldn't be sent, so only set a message if it was sent.
+    if ($submission_message && !empty($message_results[MailHandler::MESSAGE_RECIPIENT]['result'])) {
       $this->messenger()->addStatus($submission_message);
     }
 
