Contact Forms - Change Recipient Address Dynamically - D8
The contact_storage module has a feature that allows you to create a list that include a key, value and e-mail and then the mail is sent to that.

You can either use that, or you can do it yourself in a similar way. You could use a term reference for example and have a field on your terms for the e-mail. The relevant code is in contact_storage_mail_alter():

$contact_message = $message['params']['contact_message'];
foreach ($contact_message-&gt;getFields() as $field) {
  if ($field-&gt;getFieldDefinition()-&gt;getType() === 'contact_storage_options_email') {
    // One of the Option email item fields. Add the recipient to the message.
    foreach ($field as $delta =&gt; $item) {
      $label = $item-&gt;value;
      // Obtain the email to add to the message, using the label.
      $email = $item-&gt;getFieldDefinition()-&gt;getSetting('allowed_values')[$label]['emails'];
      $message['to'] .= ',' . $email;
    }
  }
}


}