web-dev-qa-db-ja.com

Rest APIを介してD8のユーザー作成時にメールが送信されない

私は現在Drupal 8.2.4で作業しており、必要なエンドポイント用のRest Webサービスモジュールを使用してヘッドレスWebアプリケーションを構築しています。エンドポイント_/entity/user_を使用してユーザーを作成しています。ただし、デフォルトのウェルカムメールがDrupalによってユーザーを作成するときに送信されません。

Drupalで「新しいアカウントをユーザーに通知する」がチェックされている状態で通常のようにユーザーを作成すると、メールが送信されるため、メールが適切に送信されるように設定しています。これを機能させるために欠けている簡単な方法はありますか?

また、_hook_ENTITY_TYPE_insert_を使用して__user_mail_notify_を使用して電子メールの送信をトリガーしようとしましたが、これも希望どおりに機能しません。私のコードは次のとおりです:

/** * Implements hook_ENTITY_TYPE_insert(). * When a new user is created, do things. */ function custom_rules_user_insert(Drupal\Core\Entity\EntityInterface $entity) { _user_mail_notify('register_no_approval_required', $entity); }

私は何か間違ったことをしていますか?これを機能させる簡単な方法はありますか、これがまだ機能しないのですかDrupal 8?パスリセットメールをセットアップする必要があるので、任意のフィードバックをいただければ幸いです。

1
redbrickone

私はこれをテストしましたが、__user_mail_notify_は現在8.2.4では機能していないようですが、hook_ENTITY_TYPE_insert()を使用して回避策を見つけましたが、_hook_mail_およびMailManagerも。

_/**
 * Implements hook_mail().
 */
function custom_rules_mail($key, &$message, $params) {
$options = array(
    'langcode' => $message['langcode'],
);
 switch ($key) {

   case 'create_user':
     $message['from'] = \Drupal::config('system.site')->get('mail');
     $message['subject'] = t('Welcome to the site!', $options);
     $message['body'][] = $params['message'];
     break;
 }
}

/**
 * Implements hook_ENTITY_TYPE_insert().
 * When a new user is created, do things.
 */
function custom_rules_user_insert(Drupal\Core\Entity\EntityInterface $entity)
{
  global $user;

//  _user_mail_notify('register_no_approval_required', $entity);


  $mailManager = \Drupal::service('plugin.manager.mail');
  $module = 'custom_rules';
  $key = 'create_user';
  $to = $entity->getEmail();
  $params['message'] = "Welcome to our site! \r\nYour username is " . $entity->getUsername() . " " . "\r\nIf you would like to reset your password, you can at the following link: \r\n" . user_pass_reset_url($entity);
  $langcode = $entity->getPreferredLangcode();
  $send = true;

  $result = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send);
  if ($result['result'] !== true) {
    drupal_set_message(t('There was a problem sending your message and it was not sent.'), 'error');
  }
  else {
    drupal_set_message(t('Your message has been sent.'));
  }

}
_

私がこれを設定した方法は機能します。ユーザーが作成されると(drupal GUIまたはREST API)を介して)、ウェルカムメールが送信されます。ウェルカムメールには、パスワードをリセットするためのリンクも含まれています。これは、定義されている_user_pass_reset_url_関数を使用します hereMailManager は、使用と理解が非常に簡単でした。

私は this ブログをフォローして、これを行う方法を理解しました。

0
redbrickone