diff --git a/inmail.install b/inmail.install
index 0d15490..cbf3aab 100644
--- a/inmail.install
+++ b/inmail.install
@@ -3,6 +3,48 @@
  * @file
  * Implementations of install hooks for the Inmail module.
  */
+use Drupal\inmail\PluginRequirementsInterface;
+
+/**
+ * Implements hook_requirements().
+ */
+function inmail_requirements($phase) {
+  $requirements = [];
+  if ($phase == 'runtime') {
+    $requirements += inmail_get_plugin_requirements();
+  }
+
+  return $requirements;
+}
+
+/**
+ * Returns plugin requirements for enabled instances.
+ *
+ * @return array
+ *   An array of plugin requirements.
+ */
+function inmail_get_plugin_requirements() {
+  /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
+  $entity_type_manager = \Drupal::entityTypeManager();
+  $plugin_types = ['analyzer', 'deliverer', 'handler'];
+  $plugins = [];
+
+  foreach ($plugin_types as $plugin_type) {
+    $enabled_instances = $entity_type_manager->getStorage("inmail_$plugin_type")->loadByProperties(['status' => TRUE]);
+    /** @var \Drupal\inmail\Entity\PluginConfigEntity $enabled_instance */
+    foreach ($enabled_instances as $enabled_instance) {
+      $key = $plugin_type . '_' . $enabled_instance->id();
+      $plugins[$key] = $enabled_instance->checkRequirements();
+      // Remove plugins that have no requirements.
+      // @todo: Think about improving it.
+      if ($plugins[$key] === TRUE) {
+        unset($plugins[$key]);
+      }
+    }
+  }
+
+  return $plugins;
+}
 
 /**
  * Implements hook_install().
diff --git a/src/Entity/PluginConfigEntity.php b/src/Entity/PluginConfigEntity.php
index 366ae77..0c6b26c 100644
--- a/src/Entity/PluginConfigEntity.php
+++ b/src/Entity/PluginConfigEntity.php
@@ -3,11 +3,12 @@
 namespace Drupal\inmail\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\inmail\PluginRequirementsInterface;
 
 /**
  * Defines a config entity skeleton for plugin configuration.
  */
-abstract class PluginConfigEntity extends ConfigEntityBase {
+abstract class PluginConfigEntity extends ConfigEntityBase implements PluginRequirementsInterface {
 
   /**
    * The machine name of the plugin configuration.
@@ -71,4 +72,24 @@ abstract class PluginConfigEntity extends ConfigEntityBase {
     $this->configuration = $configuration;
     return $this;
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function checkRequirements() {
+    // @todo: Move to the entity level.
+    $entity_type_parameters = explode('_', $this->getEntityTypeId());
+    $plugin_type = end($entity_type_parameters);
+
+    /** @var \Drupal\Core\Plugin\DefaultPluginManager $plugin_manager */
+    $plugin_manager = \Drupal::service("plugin.manager.inmail.$plugin_type");
+    // Create plugin instance.
+    // @todo: Implement getPlugin() method.
+    if ($plugin = $plugin_manager->createInstance($this->getPluginId(), $this->getConfiguration())) {
+      return $plugin->checkRequirements();
+    }
+
+    return TRUE;
+  }
+
 }
diff --git a/src/MessageProcessor.php b/src/MessageProcessor.php
index a1193f9..a45451f 100644
--- a/src/MessageProcessor.php
+++ b/src/MessageProcessor.php
@@ -99,7 +99,7 @@ class MessageProcessor implements MessageProcessorInterface {
     uasort($analyzer_configs, array($this->analyzerStorage->getEntityType()->getClass(), 'sort'));
     foreach ($analyzer_configs as $analyzer_config) {
       /** @var \Drupal\inmail\Entity\AnalyzerConfig $analyzer_config */
-      if ($analyzer_config->status()) {
+      if ($analyzer_config->status() && $analyzer_config->checkRequirements() === TRUE) {
         /** @var \Drupal\inmail\Plugin\inmail\Analyzer\AnalyzerInterface $analyzer */
         $analyzer = $this->analyzerManager->createInstance($analyzer_config->getPluginId(), $analyzer_config->getConfiguration());
         $analyzer->analyze($message, $result);
@@ -113,7 +113,7 @@ class MessageProcessor implements MessageProcessorInterface {
     // Handle message.
     foreach ($this->handlerStorage->loadMultiple() as $handler_config) {
       /** @var \Drupal\inmail\Entity\HandlerConfig $handler_config */
-      if ($handler_config->status()) {
+      if ($handler_config->status() && $handler_config->checkRequirements() === TRUE) {
         /** @var \Drupal\inmail\Plugin\inmail\handler\HandlerInterface $handler */
         $handler = $this->handlerManager->createInstance($handler_config->getPluginId(), $handler_config->getConfiguration());
         $handler->invoke($message, $result);
diff --git a/src/Plugin/inmail/Analyzer/AnalyzerBase.php b/src/Plugin/inmail/Analyzer/AnalyzerBase.php
index 5b71343..5e779a6 100644
--- a/src/Plugin/inmail/Analyzer/AnalyzerBase.php
+++ b/src/Plugin/inmail/Analyzer/AnalyzerBase.php
@@ -69,4 +69,12 @@ abstract class AnalyzerBase extends PluginBase implements AnalyzerInterface {
   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function checkRequirements() {
+    // By default, plugins have no requirements.
+    return TRUE;
+  }
+
 }
diff --git a/src/Plugin/inmail/Analyzer/AnalyzerInterface.php b/src/Plugin/inmail/Analyzer/AnalyzerInterface.php
index 2d2af2f..7891bd8 100644
--- a/src/Plugin/inmail/Analyzer/AnalyzerInterface.php
+++ b/src/Plugin/inmail/Analyzer/AnalyzerInterface.php
@@ -6,6 +6,7 @@ use Drupal\Component\Plugin\ConfigurablePluginInterface;
 use Drupal\Component\Plugin\PluginInspectionInterface;
 use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\inmail\MIME\MessageInterface;
+use Drupal\inmail\PluginRequirementsInterface;
 use Drupal\inmail\ProcessorResultInterface;
 
 /**
@@ -13,7 +14,7 @@ use Drupal\inmail\ProcessorResultInterface;
  *
  * @ingroup analyzer
  */
-interface AnalyzerInterface extends ConfigurablePluginInterface, PluginFormInterface, PluginInspectionInterface {
+interface AnalyzerInterface extends ConfigurablePluginInterface, PluginFormInterface, PluginInspectionInterface, PluginRequirementsInterface {
 
   /**
    * Analyze the given message.
diff --git a/src/Plugin/inmail/Deliverer/DelivererBase.php b/src/Plugin/inmail/Deliverer/DelivererBase.php
index 599edec..504444c 100644
--- a/src/Plugin/inmail/Deliverer/DelivererBase.php
+++ b/src/Plugin/inmail/Deliverer/DelivererBase.php
@@ -22,4 +22,12 @@ abstract class DelivererBase extends PluginBase implements DelivererInterface {
     return $this->pluginDefinition['label'];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function checkRequirements() {
+    // By default, plugins have no requirements.
+    return TRUE;
+  }
+
 }
diff --git a/src/Plugin/inmail/Deliverer/DelivererInterface.php b/src/Plugin/inmail/Deliverer/DelivererInterface.php
index 81a35ea..9df55d4 100644
--- a/src/Plugin/inmail/Deliverer/DelivererInterface.php
+++ b/src/Plugin/inmail/Deliverer/DelivererInterface.php
@@ -3,6 +3,7 @@
 namespace Drupal\inmail\Plugin\inmail\Deliverer;
 
 use Drupal\Component\Plugin\PluginInspectionInterface;
+use Drupal\inmail\PluginRequirementsInterface;
 
 /**
  * Defines methods for deliverers.
@@ -11,7 +12,7 @@ use Drupal\Component\Plugin\PluginInspectionInterface;
  *
  * @ingroup deliverer
  */
-interface DelivererInterface extends PluginInspectionInterface {
+interface DelivererInterface extends PluginInspectionInterface, PluginRequirementsInterface {
 
   /**
    * Returns the deliverer label.
diff --git a/src/Plugin/inmail/Handler/HandlerBase.php b/src/Plugin/inmail/Handler/HandlerBase.php
index 1c7cb56..d8683c3 100644
--- a/src/Plugin/inmail/Handler/HandlerBase.php
+++ b/src/Plugin/inmail/Handler/HandlerBase.php
@@ -72,4 +72,12 @@ abstract class HandlerBase extends PluginBase implements HandlerInterface {
   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function checkRequirements() {
+    // By default, plugins have no requirements.
+    return TRUE;
+  }
+
 }
diff --git a/src/Plugin/inmail/Handler/HandlerInterface.php b/src/Plugin/inmail/Handler/HandlerInterface.php
index b89b065..240657a 100644
--- a/src/Plugin/inmail/Handler/HandlerInterface.php
+++ b/src/Plugin/inmail/Handler/HandlerInterface.php
@@ -6,6 +6,7 @@ use Drupal\Component\Plugin\ConfigurablePluginInterface;
 use Drupal\Component\Plugin\PluginInspectionInterface;
 use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\inmail\MIME\MessageInterface;
+use Drupal\inmail\PluginRequirementsInterface;
 use Drupal\inmail\ProcessorResultInterface;
 
 /**
@@ -13,7 +14,7 @@ use Drupal\inmail\ProcessorResultInterface;
  *
  * @ingroup handler
  */
-interface HandlerInterface extends ConfigurablePluginInterface, PluginFormInterface, PluginInspectionInterface {
+interface HandlerInterface extends ConfigurablePluginInterface, PluginFormInterface, PluginInspectionInterface, PluginRequirementsInterface {
 
   /**
    * Returns helpful explanation for using and configuring the handler.
diff --git a/src/PluginRequirementsInterface.php b/src/PluginRequirementsInterface.php
new file mode 100644
index 0000000..71ec7a7
--- /dev/null
+++ b/src/PluginRequirementsInterface.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Drupal\inmail;
+
+/**
+ * Provides methods to check requirements of Inmail's plugins (deliverers, analyzers, handlers).
+ */
+interface PluginRequirementsInterface {
+
+  /**
+   * Checks requirements of the current plugin.
+   *
+   * @return bool|string
+   *   Returns the verbose output if requirements are not met. Otherwise, TRUE.
+   */
+  public function checkRequirements();
+
+}
