Если вы хотите написать код самостоятельно, вот простой пример отправки уведомления по электронной почте каждый раз, когда Комментарий сущность опубликована (взято с реального сайта с незначительной очисткой, но я мог что-то сломать, вытащив код для конкретного сайта):
функция mymodule_comment_insert (комментарий $entity) {
mymodule__mail_notify_admin('new_comment', $entity, '', 'insert');
}
функция mymodule_mail_notify_admin($key, $entity, $title, $moderation_state) {
$mailManager = \Drupal::service('plugin.manager.mail');
$модуль = 'моймодуль';
$to_email = '[email protected]';
$path = $entity->toUrl('canonical', ['absolute' => TRUE])->toString();
$params['сообщение'] = $путь;
$params['название'] = $название;
$params['moderation_state'] = $moderation_state;
$langcode = \Drupal::currentUser()->getPreferredLangcode();
$result = $mailManager->mail($module, $key, $to_email, $langcode, $params);
если ($ результат['результат'] !== ИСТИНА) {
$message = t('Ошибка отправки уведомления по электронной почте на адрес @email.', ['@email' => $to_email]);
\Drupal::logger('mymodule')->error($message);
возвращаться;
}
еще {
$message = t('Уведомление по электронной почте отправлено на @email', ['@email' => $to_email]);
\Drupal::logger('mymodule')->notice($message);
}
}
/*
* Для справки:
* http://valuebound.com/resources/blog/how-to-send-mail-programmatically-drupal-8
*/
функция mymodule_mail($key, &$message, $params) {
$message['from'] = \Drupal::config('system.site')->get('mail');
переключатель ($ ключ) {
случай 'новый_комментарий':
// https://www.drupal.org/project/simple_comment_email_notification
$message['subject'] = t('Новый комментарий');
$message['body'][] = t('Вы можете проверить страницу :unapprovedCommentsUrl на наличие неутвержденных комментариев и :publishedCommentsUrl на наличие опубликованных комментариев.', [
':unapprovedCommentsUrl' => \Drupal::request()->getSchemeAndHttpHost() . '/admin/content/comment/approval',
':publishedCommentsUrl' => \Drupal::request()->getSchemeAndHttpHost() . '/админ/контент/комментарий',
]);
сломать;
По умолчанию:
$ параметры = [
'код языка' => $message['код языка'],
];
// @todo Исправлено экранирование HTML.
// $message['body'][] = Html::escape($params['message']);.
$message['body'][] = $params['message'];
$message['subject'] = t('@title @ms на моем сайте',
[
'@ms' => $params['moderation_state'],
'@title' => $params['title'],
],
$опции);
сломать;
}
}