diff --git a/core/modules/user/lib/Drupal/user/Tests/UserAdminTest.php b/core/modules/user/lib/Drupal/user/Tests/UserAdminTest.php index fa6586038e0f4d6709ae2478d63279111866dc4e..3b83b5262abf541fc8287694a26efa4ca35571c8 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserAdminTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserAdminTest.php @@ -99,4 +99,54 @@ function testUserAdmin() { $this->assertEqual($account1->status, 1, 'User D unblocked'); $this->assertMail("to", $account1->mail, "Activation mail sent to user D"); } + + /** + * Tests the alternate notification e-mail address for user mails. + */ + function testNotificationEmailAddress() { + // Test that the Notification E-mail address field is on the config page. + $admin_user = $this->drupalCreateUser(array('administer users')); + $this->drupalLogin($admin_user); + $this->drupalGet('admin/config/people/accounts'); + $this->assertRaw('id="edit-mail-notification-address"', 'Notification E-mail address field exists'); + $this->drupalLogout(); + + // Test custom user registration approval email address(es). + $config = config('user.settings'); + // Allow users to register with admin approval. + $config + ->set('verify_mail', TRUE) + ->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) + ->save(); + // Set the site and notification email addresses. + $system = config('system.site'); + $server_address = $this->randomName() . '@example.com'; + $notify_address = $this->randomName() . '@example.com'; + $system + ->set('mail', $server_address) + ->set('mail_notification', $notify_address) + ->save(); + // Register a new user account. + $edit = array(); + $edit['name'] = $name = $this->randomName(); + $edit['mail'] = $mail = $edit['name'] . '@example.com'; + $this->drupalPost('user/register', $edit, t('Create new account')); + $subject = 'Account details for ' . $edit['name'] . ' at ' . $system->get('name') . ' (pending admin approval)'; + // Ensure that admin notification mail is sent to the configured + // Notification E-mail address. + $admin_mail = $this->drupalGetMails(array( + 'to' => $notify_address, + 'from' => $server_address, + 'subject' => $subject, + )); + $this->assertTrue(count($admin_mail), 'New user mail to admin is sent to configured Notification E-mail address'); + // Ensure that user notification mail is sent from the configured + // Notification E-mail address. + $user_mail = $this->drupalGetMails(array( + 'to' => $edit['mail'], + 'from' => $notify_address, + 'subject' => $subject, + )); + $this->assertTrue(count($user_mail), 'New user mail to user is sent from configured Notification E-mail address'); + } } diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc index b14118554c0eab1b3f7fbb573bd0cf990a94241e..f04c97d8271924d11e2bc342b2b20f3e9442c27e 100644 --- a/core/modules/user/user.admin.inc +++ b/core/modules/user/user.admin.inc @@ -394,6 +394,15 @@ function user_admin_settings($form, &$form_state) { '#default_value' => $config->get('signatures'), ); + // Default notifications address. + $form['mail_notification_address'] = array( + '#type' => 'email', + '#title' => t('Notification e-mail address'), + '#default_value' => config('system.site')->get('mail_notification'), + '#description' => t("The e-mail address to be used as the 'from' address for all account notifications listed below. If <em>'Visitors, but administrator approval is required'</em> is selected above, a notification email will also be sent to this address for any new registrations. Leave empty to use the default system e-mail address <em>(%site-email).</em>", array('%site-email' => config('system.site')->get('mail'))), + '#maxlength' => 180, + ); + $form['email'] = array( '#type' => 'vertical_tabs', '#title' => t('E-mails'), @@ -662,6 +671,9 @@ function user_admin_settings_submit($form, &$form_state) { ->set('status_canceled.body', $form_state['values']['user_mail_status_canceled_body']) ->set('status_canceled.subject', $form_state['values']['user_mail_status_canceled_subject']) ->save(); + config('system.site') + ->set('mail_notification', $form_state['values']['mail_notification_address']) + ->save(); } /** diff --git a/core/modules/user/user.module b/core/modules/user/user.module index f2747c7886d8722bb5e2fa650f72e53cf84fc619..5635e166496606edb64347833d9ecc3adc9f1b8a 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -2417,14 +2417,21 @@ function _user_mail_notify($op, $account, $langcode = NULL) { if ($notify || ($op != 'status_canceled' && $op != 'status_blocked')) { $params['account'] = $account; $langcode = $langcode ? $langcode : user_preferred_langcode($account); - $mail = drupal_mail('user', $op, $account->mail, $langcode, $params); + // Get the custom site notification email to use as the from email address + // if it has been set. + $site_mail = config('system.site')->get('mail_notification'); + // If the custom site notification email has not been set, we use the site + // default for this. + if (empty($site_mail)) { + $site_mail = config('system.site')->get('mail'); + } + if (empty($site_mail)) { + $site_mail = ini_get('sendmail_from'); + } + $mail = drupal_mail('user', $op, $account->mail, $langcode, $params, $site_mail); if ($op == 'register_pending_approval') { // If a user registered requiring admin approval, notify the admin, too. // We use the site default language for this. - $site_mail = config('system.site')->get('mail'); - if (empty($site_mail)) { - $site_mail = ini_get('sendmail_from'); - } drupal_mail('user', 'register_pending_approval_admin', $site_mail, language_default()->langcode, $params); } }