diff --git a/src/views/tools/IPContact.vue b/src/views/tools/IPContact.vue
index 045c159b0ef3bdd172a50a2a2a3e490c27775988..8abbf83f6204f163e0aa1ad212e6fb13d8d334ab 100644
--- a/src/views/tools/IPContact.vue
+++ b/src/views/tools/IPContact.vue
@@ -26,10 +26,10 @@
       <b-form-group :label="$t('system.ip_address_or_cidr') + ':'">
         <b-input required v-model="cidr" :placeholder="$t('system.ip_address_or_cidr')" :state="check_cidr" @change="() => {if (cidr.length === 0) {show_ip_error = false}}"></b-input>
       </b-form-group>
-      <b-textarea v-model="message" :placeholder="$t('views.tools.ip_contact.message')">
+      <b-textarea v-model="message" :placeholder="$t('views.tools.ip_contact.message')" required :state="message.length > 0 ? undefined : false">
 
       </b-textarea>
-      <b-button type="submit" class="mt-3" variant="outline-success">
+      <b-button type="submit" class="mt-3" variant="outline-success" :disabled="!can_submit" :style="'cursor: ' + (can_submit ? 'auto' : 'not-allowed')">
         <netvs-icon icon="execute"></netvs-icon>
         {{ $t('views.tools.ip_contact.submit') }}
       </b-button>
@@ -95,6 +95,9 @@ export default {
         return undefined
       }
       return ipaddress.is_ip_v6(this.cidr.split('/')[0]) || ipaddress.is_ip_v4(this.cidr)
+    },
+    can_submit() {
+      return this.check_cidr && this.message.length > 0
     }
   }
 }