diff --git a/config/schema/reroute_email.schema.yml b/config/schema/reroute_email.schema.yml
index ebd3461..0804358 100644
--- a/config/schema/reroute_email.schema.yml
+++ b/config/schema/reroute_email.schema.yml
@@ -14,4 +14,6 @@ reroute_email.settings:
     reroute_email_enable_dsm:
       type: boolean
       label: 'Enable dsm() function for debugging'
-
+    reroute_email_domain_whitelist:
+      type: string
+      label: 'Domain Whitelist'
diff --git a/reroute_email.module b/reroute_email.module
index 048a045..43045aa 100644
--- a/reroute_email.module
+++ b/reroute_email.module
@@ -9,6 +9,7 @@ define('REROUTE_EMAIL_ADDRESS', 'reroute_email_address');
 define('REROUTE_EMAIL_ADDRESS_EMPTY_PLACEHOLDER', '[No reroute email address configured]');
 define('REROUTE_EMAIL_ENABLE_MESSAGE', 'reroute_email_enable_message');
 define('REROUTE_EMAIL_ENABLE', 'reroute_email_enable');
+define('REROUTE_EMAIL_DOMAIN_WHITELIST', 'reroute_email_domain_whitelist');
 
 // Regular expression used to split email addresses provided in form.
 // This allows the use of any number of spaces, commas, or semicolons
@@ -129,6 +130,32 @@ function reroute_email_mail_alter(&$message) {
     }
   }
 
+  // Get whitelisted domains.
+  if ($domains = $config->get(REROUTE_EMAIL_DOMAIN_WHITELIST)) {
+    $filtered_recipients = [];
+
+    // Filter all recipients by domain.
+    foreach (reroute_email_split_string($to) as $recipient) {
+      foreach (reroute_email_split_string($domains) as $domain) {
+        // Add @ to domain.
+        $domain = '@' . $domain;
+
+        // Check recipient domain.
+        if (substr($recipient, -strlen($domain)) === $domain) {
+          $filtered_recipients[] = $recipient;
+        }
+      }
+    }
+
+    // If we have allowed recipients.
+    if (!empty($filtered_recipients)) {
+      // Send email only for allowed emails.
+      $message['to'] = implode(', ', $filtered_recipients);
+      // No need to send email to "reroute email".
+      return;
+    }
+  }
+
   // Get reroute_email_address, or use system.site.mail if reroute_email_address is not set.
   $reroute_email_address = $config->get(REROUTE_EMAIL_ADDRESS);
   if (empty($reroute_email_address)) {
@@ -200,3 +227,13 @@ function reroute_email_mail($key, &$message, $params) {
   $message['subject'] = $params['subject'];
   $message['body'][] = $params['body'];
 }
+
+/**
+ * Split string of email addresses (or domains) into an array.
+ *
+ * Items may be separated by any number and combination of:
+ * spaces, commas, semicolons, or newlines.
+ */
+function reroute_email_split_string($string) {
+  return preg_split('/[\s,;\n]+/', $string, -1, PREG_SPLIT_NO_EMPTY);
+}
diff --git a/src/Form/RerouteEmailSettings.php b/src/Form/RerouteEmailSettings.php
index ff1304f..3a526ba 100644
--- a/src/Form/RerouteEmailSettings.php
+++ b/src/Form/RerouteEmailSettings.php
@@ -6,6 +6,8 @@ use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 use Drupal\Core\Config\Config;
+use Egulias\EmailValidator\EmailValidatorInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 class RerouteEmailSettings extends ConfigFormBase {
 
@@ -17,11 +19,29 @@ class RerouteEmailSettings extends ConfigFormBase {
   protected $reroute_config;
 
   /**
+   * Injected email.validator service.
+   *
+   * @var EmailValidatorInterface
+   */
+  protected $email_validator;
+
+  /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
+  public function __construct(ConfigFactoryInterface $config_factory, EmailValidatorInterface $email_validator) {
     parent::__construct($config_factory);
-    $this->reroute_config = \Drupal::service('config.factory')->getEditable('reroute_email.settings');
+    $this->reroute_config = $config_factory->getEditable('reroute_email.settings');
+    $this->email_validator = $email_validator;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+      $container->get('email.validator')
+    );
   }
 
   /**
@@ -40,7 +60,8 @@ class RerouteEmailSettings extends ConfigFormBase {
     foreach ([
                'reroute_email_enable',
                'reroute_email_address',
-               'reroute_email_enable_message'
+               'reroute_email_enable_message',
+               'reroute_email_domain_whitelist'
              ] as $variable) {
       $config->set($variable, $form_state->getValue($variable));
     }
@@ -56,12 +77,15 @@ class RerouteEmailSettings extends ConfigFormBase {
     return ['reroute_email.settings'];
   }
 
+  /**
+   * {@inheritdoc}
+   */
   public function buildForm(array $form, FormStateInterface $form_state) {
     $form[REROUTE_EMAIL_ENABLE] = array(
       '#type' => 'checkbox',
-      '#title' => 'Enable rerouting',
+      '#title' => $this->t('Enable rerouting'),
       '#default_value' => $this->reroute_config->get(REROUTE_EMAIL_ENABLE),
-      '#description' => 'Check this box if you want to enable email rerouting. Uncheck to disable rerouting.',
+      '#description' => $this->t('Check this box if you want to enable email rerouting. Uncheck to disable rerouting.'),
     );
 
     $default_address = $this->reroute_config->get(REROUTE_EMAIL_ADDRESS);
@@ -70,9 +94,9 @@ class RerouteEmailSettings extends ConfigFormBase {
     }
     $form[REROUTE_EMAIL_ADDRESS] = array(
       '#type' => 'textfield',
-      '#title' => 'Email addresses',
+      '#title' => $this->t('Email addresses'),
       '#default_value' => $default_address,
-      '#description' => 'Provide a space, comma, or semicolon-delimited list of email addresses to pass through. Every destination email address which is not on this list will be rerouted to the first address on the list.<br/> If the field is empty and no value is provided, <strong>all outgoing emails would be aborted</strong> and the email would be recorded in the <a href="@dblog">recent log entries</a>.',
+      '#description' => $this->t('Provide a space, comma, or semicolon-delimited list of email addresses to pass through. Every destination email address which is not on this list will be rerouted to the first address on the list.<br/> If the field is empty and no value is provided, <strong>all outgoing emails would be aborted</strong> and the email would be recorded in the <a href="@dblog">recent log entries</a>.'),
       array('#dblog' => Url::fromRoute('dblog.overview')),
       '#states' => array(
         'visible' => array(':input[name=reroute_email_enable]' => array('checked' => TRUE)),
@@ -81,27 +105,48 @@ class RerouteEmailSettings extends ConfigFormBase {
 
     $form[REROUTE_EMAIL_ENABLE_MESSAGE] = array(
       '#type' => 'checkbox',
-      '#title' => 'Show rerouting description in mail body',
+      '#title' => $this->t('Show rerouting description in mail body'),
       '#default_value' => $this->reroute_config->get(REROUTE_EMAIL_ENABLE_MESSAGE),
-      '#description' => 'Check this box if you want a message to be inserted into the email body when the mail is being rerouted. Otherwise, SMTP headers will be used to describe the rerouting. If sending rich-text email, leave this unchecked so that the body of the email will not be disturbed.',
+      '#description' => $this->t('Check this box if you want a message to be inserted into the email body when the mail is being rerouted. Otherwise, SMTP headers will be used to describe the rerouting. If sending rich-text email, leave this unchecked so that the body of the email will not be disturbed.'),
+      '#states' => array(
+        'visible' => array(':input[name=reroute_email_enable]' => array('checked' => TRUE)),
+      ),
+    );
+
+    $form[REROUTE_EMAIL_DOMAIN_WHITELIST] = array(
+      '#type' => 'textarea',
+      '#title' => $this->t('Domain whitelist'),
+      '#default_value' => $this->reroute_config->get(REROUTE_EMAIL_DOMAIN_WHITELIST),
+      '#description' => $this->t('Provide a space, comma, or semicolon-delimited list of domains to permit delivery to.'),
       '#states' => array(
         'visible' => array(':input[name=reroute_email_enable]' => array('checked' => TRUE)),
       ),
     );
+
     return parent::buildForm($form, $form_state);
   }
 
+  /**
+   * {@inheritdoc}
+   */
   public function validateForm(array &$form, FormStateInterface $form_state) {
     if ($form_state->getValue(['reroute_email_enable']) == TRUE) {
       // Allow splitting emails by space, comma, semicolon.
       $addresslist = preg_split(REROUTE_EMAIL_EMAIL_SPLIT_RE, $form_state->getValue(['reroute_email_address']), -1, PREG_SPLIT_NO_EMPTY);
       foreach ($addresslist as $address) {
-        if (!valid_email_address($address)) {
-          $form_state->setErrorByName('reroute_email_address', t('@address is not a valid email address', [
+        if (!$this->email_validator->isValid($address)) {
+          $form_state->setErrorByName('reroute_email_address', $this->t('@address is not a valid email address', [
             '@address' => $address
           ]));
         }
       }
+      // Whitelisted domains.
+      $domain_whitelist = reroute_email_split_string($form_state->getValue(REROUTE_EMAIL_DOMAIN_WHITELIST));
+      foreach ($domain_whitelist as $domain) {
+        if (!$this->email_validator->isValid("user@" . $domain)) {
+          $form_state->setErrorByName(REROUTE_EMAIL_DOMAIN_WHITELIST, $this->t('@domain is not a valid domain', array('@domain' => $domain)));
+        }
+      }
     }
   }
 
