Index: modules/user/user.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.pages.inc,v
retrieving revision 1.74
diff -u -p -r1.74 user.pages.inc
--- modules/user/user.pages.inc	11 Jul 2010 22:14:28 -0000	1.74
+++ modules/user/user.pages.inc	27 Aug 2010 09:55:20 -0000
@@ -298,6 +298,10 @@ function user_profile_form_validate($for
  */
 function user_profile_form_submit($form, &$form_state) {
   $account = $form_state['user'];
+
+  // preserve original value of account status
+  $original_status = $account->status;
+
   $category = $form['#user_category'];
   // Remove unneeded values.
   form_state_values_clean($form_state);
@@ -308,6 +312,9 @@ function user_profile_form_submit($form,
   // this form by taking over all values, which appear in the form values too.
   $edit = array_intersect_key((array) $account, $form_state['values']);
 
+  // restore original account status, so user_save() can detect status change and send email
+  $account->status = $original_status;
+
   user_save($account, $edit, $category);
   $form_state['values']['uid'] = $account->uid;
 
Index: modules/user/user.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.test,v
retrieving revision 1.100
diff -u -p -r1.100 user.test
--- modules/user/user.test	5 Aug 2010 23:53:39 -0000	1.100
+++ modules/user/user.test	27 Aug 2010 09:55:20 -0000
@@ -1084,6 +1084,26 @@ class UserAdminTestCase extends DrupalWe
     $this->drupalPost('admin/people', $edit, t('Update'));
     $account = user_load($user_c->uid, TRUE);
     $this->assertEqual($account->status, 0, 'User C blocked');
+
+    // Test unblocking of a user from /admin/people page and sending of activation mail
+    $editunblock = array();
+    $editunblock['operation'] = 'unblock';
+    $editunblock['accounts[' . $account->uid . ']'] = TRUE;
+    $this->drupalPost('admin/people', $editunblock, t('Update'));
+    $account = user_load($user_c->uid, TRUE);
+    $this->assertEqual($account->status, 1, 'User C unblocked');
+    $this->assertMail("to", $account->mail, "Activation mail sent to user C");
+
+    // Test blocking and unblocking another user from /user/[uid]/edit form and sending of activation mail
+    $user_d = $this->drupalCreateUser(array());
+    $account1 = user_load($user_d->uid, TRUE);
+    $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => 0), t('Save'));
+    $account1 = user_load($user_d->uid, TRUE);
+    $this->assertEqual($account1->status, 0, 'User D blocked');
+    $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => TRUE), t('Save'));
+    $account1 = user_load($user_d->uid, TRUE);
+    $this->assertEqual($account1->status, 1, 'User D unblocked');
+    $this->assertMail("to", $account1->mail, "Activation mail sent to user D");
   }
 }
 
