How to import users into Drupal using Devel

The first test is a valid email address test. The second test is if an account exists for that email address. The third is if the username, generated by the "user" part of the email address, exists. If there are any issues, the "error" is logged into and array and printed at the end.

As the function goes along, a user is saves with the user part of the email address as their name, a random 6 character password and the email address as the contact address. In this example, it also give the user role number 3, which was our "subscriber" role.

The result is a bunch of username, password and email addresses printed out and a bunch of users generated for you.

DISCLAIMER: Please backup your database before you run this, just in case!


$emails = array('webmaster@thingy-ma-jig.co.uk', 'dont@email.me', 'joe.bloggs@blah.com', 'foo.bar.com');
$errors = array();
foreach ($emails as $email) {
  if (!valid_email_address($email)) {
    $errors[] = "Address '{$email}' is invalid";
  }   elseif ($user = user_load(array('mail' => $email))) {
    $errors[] = "User '{$user->name}' with email address '{$user->mail}' is already a subscriber";
  }   else {
    $username = array_shift(explode('@', $email));
    if ($user = user_load(array('name' => $username))) {
      $errors[] = "Username '{$username}' already exists";
    }
    else {
      $password = user_password(6);
      $user = array(
        'name' => $username,
        'pass' => $password,
        'mail' => $email,
        'roles' => array( 3 => 3 ),
        'status' => 1,
      );
      $user = user_save(NULL, $user);
      echo "{$username}, {$password}, {$email}\n";
    }
  }
}
echo implode("\n", $errors);

I hope this saves someone a little time.