J'essaie d'envoyer des e-mails aux utilisateurs manuellement en utilisant le hook hook_mail_alter. Ce qui suit est ma fonction dans son intégralité:
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)));
}
La sortie ressemble à ceci:
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
Comme vous pouvez le voir, des choses comme [utilisateur: nom], [site: nom] et [site: login-url] sont correctement traitées. Le seul jeton non traité est [user: one-time-login-url]. Des idées pourquoi cela se produit?
EDIT: Juste pour référence, le jeton est traité dans les e-mails de bienvenue envoyés automatiquement par le système, donc le module de jeton est actif et fonctionne ... Il ne semble tout simplement pas être traité lorsque j'appelle manuellement token_replace ().
Réponses:
Pour remplacer ce jeton, vous devez appeler en
token_replace()
tant quetoken_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE))
.La fonction user_mail_tokens () est décrite dans la documentation comme:
Le code utilisé par
_user_mail_text()
pour appeler ce rappel est le suivant.Le module Token n'est pas nécessaire pour remplacer les jetons, dans Drupal 7. Le code pour remplacer les jetons fait partie du code principal de Drupal 7; le module Token de Drupal 7 définit des jetons supplémentaires que les modules de base Drupal ne définissent pas.
la source