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.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;
+}
