diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 2b5952d..8f8dcee 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -993,12 +993,15 @@ function user_account_form(&$form, &$form_state) {
     '#weight' => -10,
   );
 
+  // The mail field is NOT required if account originally had no mail set
+  // and the user performing the edit has 'administer users' permission.
+  // This allows users without e-mail address to be edited and deleted.
   $form['account']['mail'] = array(
     '#type' => 'textfield',
     '#title' => t('E-mail address'),
     '#maxlength' => EMAIL_MAX_LENGTH,
     '#description' => t('A valid e-mail address. All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail.'),
-    '#required' => TRUE,
+    '#required' => !(empty($account->mail) && user_access('administer users')),
     '#default_value' => (!$register ? $account->mail : ''),
   );
 
@@ -1184,8 +1187,9 @@ function user_account_form_validate($form, &$form_state) {
     $mail = trim($form_state['values']['mail']);
     form_set_value($form['account']['mail'], $mail, $form_state);
 
-    // Validate the e-mail address, and check if it is taken by an existing user.
-    if ($error = user_validate_mail($form_state['values']['mail'])) {
+    // Validate the e-mail address, and check if it is taken by an existing
+    // user, but only if the field is required.
+    if ($form['account']['mail']['#required'] && ($error = user_validate_mail($form_state['values']['mail']))) {
       form_set_error('mail', $error);
     }
     elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($form_state['values']['mail']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
diff --git a/core/modules/user/user.test b/core/modules/user/user.test
index 15c427b..35c6151 100644
--- a/core/modules/user/user.test
+++ b/core/modules/user/user.test
@@ -796,6 +796,35 @@ class UserCancelTestCase extends DrupalWebTestCase {
   }
 
   /**
+   * Creates an administrative user and deletes a user without an
+   * e-mail address.
+   */
+  function testUserWithoutEmailCancelByAdmin() {
+    variable_set('user_cancel_method', 'user_cancel_reassign');
+
+    // Create a regular user.
+    $account = $this->drupalCreateUser(array());
+    // This user has no e-mail address.
+    $edit = array('mail' => '');
+    $account = user_save($account, $edit);
+
+    // Create administrative user.
+    $admin_user = $this->drupalCreateUser(array('administer users'));
+    $this->drupalLogin($admin_user);
+
+    // Delete regular user without e-mail address.
+    $this->drupalGet('user/' . $account->uid . '/edit');
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+    $this->assertRaw(t('Are you sure you want to cancel the account %name?', array('%name' => $account->name)), t('Confirmation form to cancel account displayed.'));
+    $this->assertText(t('Select the method to cancel the account above.'), t('Allows to select account cancellation method.'));
+
+    // Confirm deletion.
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+    $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), t('User deleted.'));
+    $this->assertFalse(user_load($account->uid), t('User is not found in the database.'));
+  }
+
+  /**
    * Create an administrative user and mass-delete other users.
    */
   function testMassUserCancelByAdmin() {
@@ -1671,6 +1700,17 @@ class UserEditTestCase extends DrupalWebTestCase {
     $user1->pass_raw = $new_pass;
     $this->drupalLogin($user1);
     $this->drupalLogout();
+
+    // Test that an admin can edit users without an e-mail address.
+    $admin = $this->drupalCreateUser(array('administer users'));
+    $this->drupalLogin($admin);
+    // Create a regular user.
+    $user3 = $this->drupalCreateUser(array());
+    // This user has no e-mail address.
+    $edit = array('mail' => '');
+    $user3 = user_save($user3, $edit);
+    $this->drupalPost("user/$user3->uid/edit", $edit, t('Save'));
+    $this->assertRaw(t("The changes have been saved."));
   }
 }
 
