you can maybe use rules module
alternatively create a custom module and you can inspire from this, that is used with core content moderation module:
use \Drupal\user\Entity\User; /** * * * Envoie de mail en fonction des transitions le modération de contenu. * * @param \Drupal\Core\Entity\EntityInterface $entity */ function my_module_entity_presave(Drupal\Core\Entity\EntityInterface $entity) { if ($entity->getEntityTypeId() !== 'content_moderation_state') { return; } $article_id = $entity->get('content_entity_id')->getString(); $article = \Drupal\node\Entity\Node::load($article_id); if ($article->bundle() !== 'article') { return; } global $base_url; $article_title = $article->get('title')->getString(); $article_url = $base_url . "/node/" . $article->get('nid')->getString(); $author_name = $article->getOwner()->get('field_cn_ldap')->getString(); $author_email = $article->getOwner()->getEmail(); $current_user_uid = \Drupal::currentUser()->id(); $current_user_name = \Drupal\user\Entity\User::load($current_user_uid) ->get('field_cn_ldap') ->getString(); $is_author = ($current_user_name == $author_name); $uids = \Drupal::entityQuery('user') ->condition('status', 1) ->condition('roles', 'redacteur_en_chef') ->execute(); ; $users = User::loadMultiple($uids); $emails_redacteur_en_chef = []; foreach ($users as $user) { $emails_redacteur_en_chef[] = $user->getEmail(); } $emails_redacteur_en_chef = implode(',', $emails_redacteur_en_chef); $moderation_state = $entity->get('moderation_state')->getString(); $moderation_state_original = ''; if ($entity->original) { $moderation_state_original = $entity->original->get('moderation_state') ->getString(); } $is_transition_change = ($moderation_state !== $moderation_state_original); include 'includes/notification/messages.php'; include 'includes/notification/titles.php'; $send_to = $author_email; $params['node_title'] = $title_mod; $params['message'] = $message_same_state; $send = FALSE; switch ($moderation_state) { case 'draft': if (!$is_transition_change && !$is_author) { $send = TRUE; } break; case 'relecture': if (!$is_transition_change && !$is_author) { $send = TRUE; } elseif ($is_transition_change) { $send_to = "[email protected]"; $params['node_title'] = $title_prop; $params['message'] = $message_prop; $send = TRUE; } break; case 'relecture1': if (!$is_transition_change && !$is_author) { $send = TRUE; } elseif ($is_transition_change) { $send_to = "[email protected]"; $params['node_title'] = $title_relec1; $params['message'] = $message_relec1; $send = TRUE; } break; case 'relecture2': $send_to = $emails_redacteur_en_chef; $params['node_title'] = $title_relec2; $params['message'] = $message_relec2; $send = TRUE; break; case 'published': if (!$is_transition_change) { $send_to .= ','; $send_to .= $emails_redacteur_en_chef; $send = TRUE; } else { $send_to = "[email protected]"; $params['node_title'] = $title_pub; $params['message'] = $message_pub; $send = TRUE; } break; case 'maj': $send_to = "[email protected]"; $params['node_title'] = $title_maj; $params['message'] = $message_maj; $send = TRUE; break; default: break; } if ($send) { $mailManager = \Drupal::service('plugin.manager.mail'); $module = "amu_dud_rules"; $key = 'state_changed_action'; $to = $send_to; $langcode = \Drupal::currentUser()->getPreferredLangcode(); $result = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send); if ($result['result'] !== TRUE) { drupal_set_message(t('There was a problem sending notifications.'), 'error'); } else { drupal_set_message(t("A notification has been sent to $to")); } } } /** * Implements hook_mail(). */ function my_module_mail($key, &$message, $params) { $options = [ 'langcode' => $message['langcode'], ]; switch ($key) { case 'state_changed_action': //$message['from'] = \Drupal::config('system.site')->get('mail'); $from = '[email protected]'; $message['from'] = $from; $message['headers']['From'] = $from; $message['headers']['Sender'] = $from; $message['headers']['Return-Path'] = $from; $message['subject'] = t('@title', ['@title' => $params['node_title']], $options); $message['body'][] = $params['message']; break; } }