Access submitted form data in custom callback before hook_mail_alter()
Why do you need a submit callback at all? The built contact message is available in hook_mail_alter(), you can just access the submitted data there?

This is from a custom project where we did something similar:

/**
 * Implements hook_mail_alter().
 */
function yourmodule_mail_alter(&amp;$message) {
  if ($message['id'] == 'contact_page_mail') {
    /** @var \Drupal\contact\Entity\Message $contact_message */
    $contact_message = $message['params']['contact_message'];

    if ($contact_message-&gt;bundle() != 'feedback') {
      return;
    }

    $recipient_address = $contact_message-&gt;get('yourfield')-&gt;value;
    if (\Drupal::service('email.validator')-&gt;isValid($recipient_address)) {
      $message['to'] = $recipient_address;
    }
  }
}