Как отправить уведомление по электронной почте при программном создании пользователя Drupal? - PullRequest
6 голосов
/ 22 ноября 2010

Я пытаюсь создать пользователя с помощью кода.У меня есть следующее, что создал пользователь.Однако он не отправляет пользователю электронное письмо с сообщением о создании учетной записиКак я могу это сделать?

$newUser = array(
  'name' => 'username',
  'pass' => 'password', // note: do not md5 the password
  'mail' => 'email address',
  'status' => 1,
  'init' => 'email address'
);           
user_save(null, $newUser);

Ответы [ 7 ]

28 голосов
/ 15 мая 2012

Вы можете использовать стандартную функцию _user_mail_notify () из модуля "Пользователь" ядра Drupal.

   // Create user.
   $new_user = array(
      'name' => $username,
      'pass' => $password, 
      'mail' => $email,
      'status' => 1,
      'init' => $email,
      'roles' => array(DRUPAL_AUTHENTICATED_RID => TRUE),
    );  
   $account = user_save(NULL, $new_user);
   // Set operation.
   $op = 'register_no_approval_required';
   // Send an email.
   _user_mail_notify($op, $account);

Существуют различные значения $ op:

 /* @param $op
 *   The operation being performed on the account. Possible values:
 *   - 'register_admin_created': Welcome message for user created by the admin.
 *   - 'register_no_approval_required': Welcome message when user
 *     self-registers.
 *   - 'register_pending_approval': Welcome message, user pending admin
 *     approval.
 *   - 'password_reset': Password recovery request.
 *   - 'status_activated': Account activated.
 *   - 'status_blocked': Account blocked.
 *   - 'cancel_confirm': Account cancellation request.
 *   - 'status_canceled': Account canceled.*/
2 голосов
/ 22 ноября 2010

Вы реализовали user_register_notify? http://drupal.org/project/user_register_notify

Вот инструкции по настройке: http://drupal.org/node/97183/cvs-instructions/HEAD

1 голос
/ 23 ноября 2010

Если вы хотите имитировать, как ядро ​​Drupal справляется с этим, взгляните на user_register_submit () .Это функция, которая реагирует на упомянутый выше флажок и, если требуются уведомления, передает сохраненный пользовательский объект в _user_mail_notify () , который обрабатывает отправку сообщения.

0 голосов
/ 10 декабря 2015

Стандартный способ может немного изменить ваш код, например так (измените user_save и добавьте остальные);

$account = user_save('', $newUser); //the first parameter is left blank so a new user is created

  // If you want to send the welcome email, use the following code
  // Manually set the password so it appears in the e-mail.
  $account->password = $newUser['pass'];

  // Send the e-mail through the user module.
  drupal_mail('user', 'register_no_approval_required',
    $email, NULL, array('account' => $account), variable_get('site_mail', 'noreply@yourdomain.com'));
0 голосов
/ 03 июля 2014

Приведенные выше ответы почти все делают одно и то же, но прыгают в цепочку в разных точках;некоторые требуют дополнительных модулей;а некоторые ссылаются на системные формы.

Лично, хотя модуль «Правила» может выполнить это за вас, кажется немного противоречивым программно создать пользователя, а затем использовать интерфейс для отправки уведомления.

Я бы выбрал использование _user_mail_notify () метод и передача нужной вам операции (register_pending_approval, register_no_approval_required и т. Д.).Это ставит вас в цепочку настолько низко, что вы не полагаетесь на дополнительные модули, но достаточно высоко, чтобы использовать логику регистрации в Drupal.

0 голосов
/ 26 июня 2013

реализовать hook_mail:

function YOURMODULE_mail($key, &$message, $params) {

  drupal_set_message('email test');

  switch ($key) {
    case 'mymail':
      // Set headers etc
      $message['to'] = 'youremail@email.com';
      $message['subject'] = t('Hello');
      $message['body'][] = t('Hello @username,', array('@username' => $params['username']));
      $message['body'][] = t('The main part of the message.');
      break;
}
}

затем используйте функцию drupal_mail ():

$result = drupal_mail('example', 'mymail','email@email.com', 'en', 'params','admin@email.com', 'to@email.com');
0 голосов
/ 23 ноября 2010

Вы можете использовать Правила .Вы можете добавить действие, которое будет запущено при создании пользователя.

...