2010-11-22 23 views
6

Estoy intentando crear un usuario utilizando código. Tengo lo siguiente que creó el usuario. Sin embargo, no envía un correo electrónico al usuario diciendo que la cuenta ha sido creada. ¿Cómo puedo hacer eso?¿Cómo envío una notificación por correo electrónico cuando programo la creación de un usuario de Drupal?

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

Intenta crear usuario manualmente, ¿Envía un correo electrónico? –

+0

Si hago clic en "Notificar al usuario de una nueva cuenta", recibo un correo electrónico. – Will

Respuesta

-2

usted podría utilizar Rules. Puede agregar una acción para disparar cuando se crea el usuario.

1

Si desea imitar cómo el núcleo de Drupal maneja esto, eche un vistazo a user_register_submit(). Esa es la función que reacciona a la casilla de verificación que mencionas arriba, y si se desean notificaciones, pasa el objeto de usuario guardado al _user_mail_notify(), que maneja el envío del mensaje.

28

Puede usar la función estándar _user_mail_notify() desde el módulo "Usuario" del núcleo 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); 

Hay diferentes valores de $ 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.*/ 
+1

¿No se invoca '_user_mail_notify' mientras se usa user_save ?? en Drupal 7 sin embargo –

0

implementar hook_mail:

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

    drupal_set_message('email test'); 

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

a continuación, utilizar la función drupal_mail():

$result = drupal_mail('example', 'mymail','[email protected]', 'en', 'params','[email protected]', '[email protected]'); 
0

Lo anterior las respuestas casi todas hacen lo mismo, b ú saltar a la cadena en diferentes puntos; algunos requieren módulos adicionales; y algunos refiriéndose a formularios del sistema.

Personalmente, aunque el módulo de Reglas puede lograr esto para usted, parece un tanto contradictorio crear un usuario mediante programación, luego usar la interfaz de usuario para enviar la notificación.

Yo optaría por utilizar el método _user_mail_notify() y pasar la operación que desea (register_pending_approval, register_no_approval_required, etc.). Esto lo coloca en la cadena lo suficientemente bajo como para no depender de módulos adicionales, pero lo suficientemente alto como para acceder a la lógica de registro de Drupal.

0

La forma estándar puede cambiar un poco su código, así (cambie de user_save y agregue el resto);

$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', '[email protected]')); 
Cuestiones relacionadas