diff --git a/src/Form/BasicDisable.php b/src/Form/BasicDisable.php
index 5c3e9d1..9b51c25 100644
--- a/src/Form/BasicDisable.php
+++ b/src/Form/BasicDisable.php
@@ -168,7 +168,6 @@ class BasicDisable extends FormBase {
       '@uid' => $account->id(),
     ]);
 
-    // @todo Not working, not sure why though.
     // E-mail account to inform user that it has been disabled.
     $params = ['account' => $account];
     \Drupal::service('plugin.manager.mail')->mail('tfa', 'tfa_disabled_configuration', $account->getEmail(), $account->getPreferredLangcode(), $params);
diff --git a/src/Form/BasicSetup.php b/src/Form/BasicSetup.php
index 928a2d8..f66e1a8 100644
--- a/src/Form/BasicSetup.php
+++ b/src/Form/BasicSetup.php
@@ -256,15 +256,28 @@ class BasicSetup extends FormBase {
           '@uid' => $account->id(),
         ]);
 
-        // @todo Not working, not sure why though.
-        // $params = array('account' => $account);
-        // \Drupal::service('plugin.manager.mail')->mail('tfa_basic', 'tfa_basic_tfa_enabled', $account->getEmail(), $account->getPreferredLangcode(), $params);
+        // @todo - Temporary fix for preventing emails from sending when setting up a fallback plugin.
+        // @todo - Remove this check along side removal of fallback concept in #2924691
+        $validation_plugin_manager = \Drupal::service('plugin.manager.tfa.validation');
+        $validation_plugins = $validation_plugin_manager->getDefinitions();
+        $validation_plugin_id = str_replace('_setup', '', $storage['step_method']);
+        $current_plugin_is_fallback = FALSE;
+
+        if (isset($validation_plugins[$validation_plugin_id])) {
+          $validation_plugin = $validation_plugin_manager->createInstance($validation_plugin_id, ['uid' => $account->id()]);
+          $current_plugin_is_fallback = $validation_plugin->isFallback();
+        }
+
+        if (!$current_plugin_is_fallback) {
+          $params = array('account' => $account);
+          \Drupal::service('plugin.manager.mail')->mail('tfa', 'tfa_enabled_configuration', $account->getEmail(), $account->getPreferredLangcode(), $params);
+        }
       }
     }
   }
 
   /**
-   * Steps eligble for TFA setup.
+   * Steps eligible for TFA setup.
    */
   private function tfaFullSetupSteps() {
     $config = $this->config('tfa.settings');
diff --git a/tfa.install b/tfa.install
index 4f0fb55..7fb6af7 100644
--- a/tfa.install
+++ b/tfa.install
@@ -5,27 +5,6 @@
  * Installation related functions for TFA module.
  */
 
-/**
- * Implements hook_requirements().
- */
-function tfa_requirements($phase) {
-  $requirements = array();
-
-  $requirements['tfa'] = array(
-    'title' => t('Two-factor Authentication (TFA)'),
-  );
-
-  if (class_exists('\Otp\Otp')) {
-    $requirements['tfa']['severity'] = REQUIREMENT_OK;
-  }
-  else {
-    $requirements['tfa']['severity'] = REQUIREMENT_ERROR;
-    $requirements['tfa']['description'] = t("Please install the 'christian-riesen/otp' library via composer. See the module README for instructions.");
-  }
-
-  return $requirements;
-}
-
 /**
  * Clear this module's plugin cache after validation plugins moved to ga_login module.
  */
diff --git a/tfa.module b/tfa.module
index fb9f5d4..bdf3ecf 100644
--- a/tfa.module
+++ b/tfa.module
@@ -35,3 +35,38 @@ function tfa_block_access(Block $block, $operation, AccountInterface $account) {
     return AccessResult::forbidden();
   }
 }
+
+/**
+ * Implements hook_mail().
+ */
+function tfa_mail($key, &$message, $params) {
+  $account = $params['account'];
+  $variables = [
+    '@site_name' => \Drupal::config('system.site')->get('name'),
+    '@username' => $account->getDisplayName(),
+  ];
+  $body = [];
+
+  switch($key) {
+    case 'tfa_enabled_configuration':
+      $subject = t('Your @site_name account now has two-factor authentication', $variables);
+      $body[] = t('@username,', $variables);
+      $body[] = t('Thanks for configuring two-factor authentication on your @site_name account!', $variables);
+      $body[] = t('This additional level of security will help to ensure that only you are able to log in to your account.');
+      $body[] = t('If you ever lose the device you configured, you should act quickly to delete its association with this account.');
+      $body[] = t("-- \n@site_name team", $variables);
+      break;
+
+    case 'tfa_disabled_configuration':
+      $subject = t('Your @site_name account no longer has two-factor authentication', $variables);
+      $body[] = t('@username,', $variables);
+      $body[] = t('Two-factor authentication has been disabled on your @site_name account.', $variables);
+      $body[] = t('If you did not take this action, please contact a site administrator immediately.');
+      $body[] = t("-- \n@site_name team", $variables);
+
+      break;
+  }
+
+  $message['subject'] .= str_replace(["\r", "\n"], '', $subject);
+  $message['body'] = $body;
+}
