User Login with Email Address - Services
You can do this in a custom module:

/**
 * Implements hook_services_resources_alter().
 */
function my_module_services_resources_alter(&amp;$resources, &amp;$endpoint) {
  // Override the normal user login callback.
  if (isset($resources['user']['actions']['login']['callback'])) {
    $resources['user']['actions']['login']['callback'] = 'my_module_services_login';
  }
}

/**
 * Replacement callback for the Services user login resource. Optionally use the email address to login.
 *
 * @see _user_resource_login().        
 * @see https://drupal.org/node/1431724
 */
function my_module_services_login($username, $password) {
  $result = db_query(
    "SELECT name FROM {users} WHERE LOWER(mail) = LOWER(:username)",
    array(':username' =&gt; $username)
  )-&gt;fetch();
  if (!empty($result-&gt;name)) { $username = $result-&gt;name; }
  return _user_resource_login($username, $password);
}


Using this technique, you don't need to patch the Services module.

This solution is borrowed from DrupalGap:

http://cgit.drupalcode.org/drupalgap/tree/modules/drupalgap_logintoboggan/drupalgap_logintoboggan.module