Ich versuche, E-Mails manuell über den Hook hook_mail_alter an Benutzer zu senden. Folgendes ist meine Funktion in ihrer Gesamtheit:
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)));
}
Die Ausgabe sieht folgendermaßen aus:
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
Wie Sie sehen können, werden Dinge wie [Benutzer: Name], [Site: Name] und [Site: Login-URL] ordnungsgemäß verarbeitet. Das einzige Token, das nicht verarbeitet wird, ist [Benutzer: Einmalige Anmelde-URL]. Irgendwelche Ideen, warum das passiert?
EDIT: Nur als Referenz, das Token nicht in den Begrüßungs - E-Mail verarbeitet bekommen , die vom System automatisch ausgesendet hat, so dass das Token - Modul aktiv ist und funktioniert ... Es scheint einfach nicht verarbeitet werden , wenn ich token_replace manuell aufrufe ().
Antworten:
Um dieses Token zu ersetzen, müssen Sie
token_replace()
als aufrufentoken_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE))
.Die Funktion user_mail_tokens () wird in der Dokumentation wie folgt beschrieben:
Der Code, mit
_user_mail_text()
dem dieser Rückruf aufgerufen wird, ist der folgende.Das Token-Modul ist in Drupal 7 nicht erforderlich, um Token zu ersetzen. Der Code zum Ersetzen von Token ist Teil des Drupal 7-Kerncodes. Das Token-Modul in Drupal 7 definiert zusätzliche Token, die Drupal-Kernmodule nicht definieren.
quelle