Saya mencoba mengirim e-mail ke pengguna secara manual dengan menggunakan hook_mail_alter hook. Berikut ini adalah fungsi saya secara keseluruhan:
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)));
}
Outputnya terlihat seperti ini:
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
Seperti yang Anda lihat, hal-hal seperti [pengguna: nama], [situs: nama], dan [situs: login-url] diproses dengan benar. Satu-satunya token yang tidak diproses adalah [user: one-time-login-url]. Adakah ide mengapa ini terjadi?
EDIT: Hanya untuk referensi, token tidak diproses dalam e-mail Selamat Datang yang dikirim oleh sistem secara otomatis, sehingga modul token aktif dan berfungsi ... Sepertinya tidak diproses saat saya memanggil token_replace secara manual ().
Jawaban:
Untuk mengganti token itu, Anda harus memanggil
token_replace()
sebagaitoken_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE))
.Fungsi user_mail_tokens () dijelaskan dalam dokumentasi sebagai:
Kode yang digunakan oleh
_user_mail_text()
untuk memanggil callback adalah yang berikut.Modul Token tidak perlu untuk mengganti token, dalam Drupal 7. Kode untuk mengganti token adalah bagian dari kode inti Drupal 7; modul Token di Drupal 7 mendefinisikan token tambahan yang tidak didefinisikan modul inti Drupal.
sumber