我将使用以下代码。
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'user')
->propertyCondition('status', 0)
// Avoid loading the anonymous user.
->propertyCondition('uid', 0, '<>')
// Comment out the next line if you need to enable also the super user.
->propertyCondition('uid', 1, '<>')
->execute();
if (isset($result['user'])) {
// Disable the email sent when the user account is enabled.
// Use this code if you don't use the code marked with (1).
// $old_value = variable_get('user_mail_status_activated_notify', TRUE);
// variable_set('user_mail_status_activated_notify', FALSE);
$uids = array_keys($result['user']);
$users = entity_load('user', $uids);
foreach ($users as $uid => $user) {
$user->status = 1;
$original = clone $user; // (1)
$user->original = $original; // (1)
user_save($user);
}
// Restore the value of the Drupal variable.
// Use this code if you don't use the code marked with (1).
// variable_set('user_mail_status_activated_notify', $old_value);
}
- 该代码仅加载未启用的帐户。加载已经启用的帐户是没有用的。
- 该代码避免加载匿名用户帐户,该帐户不是真实帐户。
克莱夫(Clive)说对了,说使用user_save() Drupal可以向启用的用户发送电子邮件是正确的。该函数使用的代码如下。
// Send emails after we have the new user object.
if ($account->status != $account->original->status) {
// The user's status is changing; conditionally send notification email.
$op = $account->status == 1 ? 'status_activated' : 'status_blocked';
_user_mail_notify($op, $account);
}
使用我的代码,条件$account->status != $account->original->status
未得到验证,并且电子邮件也未发送。或者,您可以FALSE
在调用之前将Drupal变量“ user_mail_status_activated_notify”的值设置为user_save()
,如代码中所示。更改该Drupal变量的值将具有全局作用,并且当其他代码将其值更改为时,它将不起作用TRUE
。设置$user->original
为$user
对象的副本是确保调用user_save()
不会有效地向用户发送任何电子邮件的唯一方法,因为用户对象已与我的代码一起保存。