Estoy tratando de enviar correos electrónicos a los usuarios manualmente mediante el hook hook_mail_alter. La siguiente es mi función en su totalidad:
function custom_module_mail_alter(&$message) {
$email = '[user:name],
A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password.
After setting your password, you will be able to log in at [site:login-url] in the future using:
username: [user:name]
password: Your password
-- [site:name] team';
$account = $message['params']['account'];
$uid = $account->uid;
$_user = user_load($uid);
dpm(token_replace($email, array('user'=>$_user)));
}
El resultado se ve así:
Peter,
A site administrator at Website has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password.
After setting your password, you will be able to log in at http://localhost/website/user in the future using:
username: Peter
password: Your password
-- Website team
Como puede ver, cosas como [usuario: nombre], [sitio: nombre] y [sitio: login-url] se procesan correctamente. El único token que no se procesa es [usuario: one-time-login-url]. ¿Alguna idea de por qué está sucediendo esto?
EDIT: Sólo como referencia, el token no se procesan en los correos electrónicos de bienvenida que se envía a cabo por el sistema de forma automática, por lo que el módulo de token es activa y trabajando ... Simplemente no parece que se procesan cuando llamo manualmente token_replace ()

Respuestas:
Para reemplazar ese token, debe llamar
token_replace()comotoken_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).La función user_mail_tokens () se describe en la documentación como:
El código utilizado por
_user_mail_text()para llamar a esa devolución de llamada es el siguiente.El módulo Token no es necesario para reemplazar tokens, en Drupal 7. El código para reemplazar tokens es parte del código central de Drupal 7; El módulo Token en Drupal 7 define tokens adicionales que los módulos principales de Drupal no definen.
fuente