Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.752
diff -u -p -r1.752 common.inc
--- includes/common.inc	16 Jan 2008 10:37:30 -0000	1.752
+++ includes/common.inc	25 Jan 2008 16:49:43 -0000
@@ -813,13 +813,18 @@ function t($string, $args = array(), $la
  * @return
  *   TRUE if the address is in a valid format.
  */
-function valid_email_address($mail) {
+function valid_email_address($mail, $allow_name = FALSE) {
+  $name = '((?:"[^\"\f\n\r\t\v]+" <))?';
+  $angle = '(?(1)>)';
   $user = '[a-zA-Z0-9_\-\.\+\^!#\$%&*+\/\=\?\`\|\{\}~\']+';
   $domain = '(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.?)+';
   $ipv4 = '[0-9]{1,3}(\.[0-9]{1,3}){3}';
   $ipv6 = '[0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7}';
 
-  return preg_match("/^$user@($domain|(\[($ipv4|$ipv6)\]))$/", $mail);
+  $addrspec = "$user@($domain|(\[($ipv4|$ipv6)\]))";
+  $mailbox = "$name$addrspec$angle";
+  $expression = $allow_name ? $mailbox : $addrspec;
+  return preg_match('/^'. $expression .'$/', $mail);
 }
 
 /**
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.59
diff -u -p -r1.59 system.admin.inc
--- modules/system/system.admin.inc	24 Jan 2008 10:59:29 -0000	1.59
+++ modules/system/system.admin.inc	25 Jan 2008 16:49:44 -0000
@@ -1182,7 +1182,7 @@ function system_site_information_setting
  */
 function system_site_information_settings_validate($form, &$form_state) {
   // Validate the e-mail address.
-  if ($error = user_validate_mail($form_state['values']['site_mail'])) {
+  if ($error = user_validate_mail($form_state['values']['site_mail'], TRUE)) {
     form_set_error('site_mail', $error);
   }
   // Validate front page path.
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.889
diff -u -p -r1.889 user.module
--- modules/user/user.module	22 Jan 2008 07:51:56 -0000	1.889
+++ modules/user/user.module	25 Jan 2008 16:49:44 -0000
@@ -393,9 +393,9 @@ function user_validate_name($name) {
   if (strlen($name) > USERNAME_MAX_LENGTH) return t('The username %name is too long: it must be %max characters or less.', array('%name' => $name, '%max' => USERNAME_MAX_LENGTH));
 }
 
-function user_validate_mail($mail) {
+function user_validate_mail($mail, $allow_name = FALSE) {
   if (!$mail) return t('You must enter an e-mail address.');
-  if (!valid_email_address($mail)) {
+  if (!valid_email_address($mail, $allow_name)) {
     return t('The e-mail address %mail is not valid.', array('%mail' => $mail));
   }
 }
