Рейтинг:0

Как лучше отправлять уведомления по электронной почте о создании нового объекта?

флаг hk

Я пытался понять, как лучше всего обрабатывать настраиваемые уведомления вокруг Обратная связь с сайтом модуль. Модуль создает новый объект типа WebsiteFeedback (настраиваемый объект, определенный модулем) всякий раз, когда пользователь отправляет отзыв с помощью модуля.

Я понимаю Уведомления объектов модуль, но, похоже, у него нет версии Drupal 9.

Есть ли что-то готовое для Drupal 9?

Jaypan avatar
флаг de
Модуль «Правила» должен сделать это за вас.
apaderno avatar
флаг us
Я голосую за то, чтобы закрыть этот вопрос, потому что он просит рекомендаций или предложений по хостингу, книгам, инструментам, модулям, темам, дистрибутивам, учебным пособиям или другим внешним ресурсам.
флаг fr
Решение с использованием правил описано здесь: https://www.drupal.org/docs/8/modules/d8-rules-essentials/examples/email-examples/sending-html-email Все, что вам нужно сделать, это импортировать это правило. и используйте пользовательский интерфейс, чтобы немного изменить его для вашего варианта использования.
Рейтинг:1
флаг cn

Если вы хотите написать код самостоятельно, вот простой пример отправки уведомления по электронной почте каждый раз, когда Комментарий сущность опубликована (взято с реального сайта с незначительной очисткой, но я мог что-то сломать, вытащив код для конкретного сайта):

функция 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'],
        ],
        $опции);
      сломать;
  }
}
флаг fr
Правила дают вам возможность делать то же самое без написания и поддержки собственного кода. Кроме того, с Rules у вас есть пользовательский интерфейс, который позволит вам легко изменять рабочий процесс, если ваши потребности меняются. Кроме того, с Rules вам не нужно беспокоиться о написании собственного кода электронной почты, который может быть сложным и подвержен ошибкам. Например, хотите использовать HTML в своих электронных письмах? Не с приведенным выше кодом... Правила похожи на представления, но для рабочего процесса. Конечно, вы можете написать свой собственный код, запрашивающий базу данных, чтобы отобразить все, что вы хотите, но Views проще в использовании и обслуживании для большинства случаев использования. Так же и с Правилами.
флаг cn
@anonymous Конечно, Правила — это одно из решений. Но некоторые люди не хотят доверять модулю, у которого была только альфа-версия на протяжении всего жизненного цикла Drupal 8. Для некоторых людей безопасность имеет значение.
флаг fr
И что такого безопасного в пользовательском коде по сравнению с кодом, который используется/тестируется на тысячах сайтов? Именно из-за такого отношения большинство модулей переходят сразу к «стабильной» версии, даже если у них нет тестов, нет путей обновления между «стабильными» версиями и есть изменения, нарушающие BC, между второстепенными точечными выпусками. В них нет ничего «стабильного», кроме имени, а под любым другим именем они бы так же воняли (извиняюсь перед Шекспиром).Быть образованным потребителем выгодно, и если вы судите только по тому, является ли релиз «стабильным», то вы обманываете себя. Слово не имеет значения.
флаг cn
Я не сказал «стабильный», я сказал «обеспечение безопасности». Альфа-модуль = не подлежит политике раскрытия информации о безопасности drupal.org. Сколько лет уже в альфе? И в любое время может раскрыть нулевой день.
флаг cn
Rules — это сложный модуль, который открывает огромную поверхность для атаки, если все, что вам нужно, это отправить несколько электронных писем. Не говорю, что это неправильный подход, но это определенно не самый безопасный подход к установке альфа-модуля.
флаг fr
Конечно, я не согласен, но это не место для обсуждения. Тем не менее, вы совершенно не правы, когда говорите, что Rules не обеспечивают безопасность — они ДЕЙСТВУЮТ.
флаг cn
@anonymous Я буду рад, если меня поправят, если я сказал что-то фактически неверное. Не могли бы вы дать мне ссылку, где говорится, что Правила для D8/9 имеют защиту? Я только что проверил страницу модуля «Правила», и там написано: «Стабильные выпуски для этого проекта подпадают под действие политики рекомендаций по безопасности». Это просто шаблон drupal.org, но нет упоминания об особом исключении безопасности для правил.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.