diff --git a/web/src/tippyjs.ts b/web/src/tippyjs.ts
index 6423287009..82128c06ee 100644
--- a/web/src/tippyjs.ts
+++ b/web/src/tippyjs.ts
@@ -449,7 +449,10 @@ export function initialize(): void {
     });
 
     tippy.delegate("body", {
-        target: "#user_email_address_dropdown_container.disabled_setting_tooltip",
+        target: [
+            "#user_email_address_dropdown_container.disabled_setting_tooltip",
+            "#realm_invite_required_container.disabled_setting_tooltip",
+        ].join(","),
         content: $t({
             defaultMessage: "Configure your email to access this feature.",
         }),
diff --git a/web/templates/settings/organization_permissions_admin.hbs b/web/templates/settings/organization_permissions_admin.hbs
index ba0a585433..267f3fc9cf 100644
--- a/web/templates/settings/organization_permissions_admin.hbs
+++ b/web/templates/settings/organization_permissions_admin.hbs
@@ -10,12 +10,14 @@
                 {{> settings_save_discard_widget section_name="join-settings" }}
             
             
-                {{> settings_checkbox
-                  setting_name="realm_invite_required"
-                  prefix="id_"
-                  is_checked=realm_invite_required
-                  label=admin_settings_label.realm_invite_required}}
-
+                
+                    {{> settings_checkbox
+                      setting_name="realm_invite_required"
+                      prefix="id_"
+                      is_checked=realm_invite_required
+                      is_disabled=(not user_has_email_set)
+                      label=admin_settings_label.realm_invite_required}}
+                
                 {{> group_setting_value_pill_input
                   setting_name="realm_can_invite_users_group"
                   label=group_setting_labels.can_invite_users_group}}
diff --git a/zerver/tests/test_realm.py b/zerver/tests/test_realm.py
index 46e905ec58..90d3b8c1df 100644
--- a/zerver/tests/test_realm.py
+++ b/zerver/tests/test_realm.py
@@ -244,6 +244,37 @@ class RealmTest(ZulipTestCase):
         realm = get_realm("zulip")
         self.assertNotEqual(realm.description, new_description)
 
+    def test_demo_organization_invite_required(self) -> None:
+        realm = get_realm("zulip")
+        self.assertFalse(realm.invite_required)
+
+        self.login("desdemona")
+        data = dict(invite_required="true")
+        result = self.client_patch("/json/realm", data)
+        self.assert_json_success(result)
+        realm.refresh_from_db()
+        self.assertTrue(realm.invite_required)
+
+        # Update realm to be a demo organization
+        realm.demo_organization_scheduled_deletion_date = timezone_now() + timedelta(days=30)
+        realm.save()
+
+        # Demo organization owner's don't have an email address set initially
+        desdemona = self.example_user("desdemona")
+        desdemona.delivery_email = ""
+        desdemona.save()
+
+        data = dict(invite_required="false")
+        result = self.client_patch("/json/realm", data)
+        self.assert_json_error(result, "Configure owner account email address.")
+
+        desdemona.delivery_email = "desdemona@zulip.com"
+        desdemona.save()
+        result = self.client_patch("/json/realm", data)
+        self.assert_json_success(result)
+        realm.refresh_from_db()
+        self.assertFalse(realm.invite_required)
+
     def test_realm_convert_demo_realm(self) -> None:
         data = dict(string_id="coolrealm")
 
diff --git a/zerver/views/realm.py b/zerver/views/realm.py
index d1607740ec..4f2eb51348 100644
--- a/zerver/views/realm.py
+++ b/zerver/views/realm.py
@@ -254,6 +254,9 @@ def update_realm(
     if waiting_period_threshold is not None and not user_profile.is_realm_owner:
         raise OrganizationOwnerRequiredError
 
+    if realm.demo_organization_scheduled_deletion_date is not None and invite_required is not None:
+        check_demo_organization_has_set_email(realm)
+
     if enable_spectator_access:
         realm.ensure_not_on_limited_plan()