diff --git a/core/modules/update/update.fetch.inc b/core/modules/update/update.fetch.inc index c6652a70..c6c98d1 100644 --- a/core/modules/update/update.fetch.inc +++ b/core/modules/update/update.fetch.inc @@ -351,7 +351,12 @@ function _update_cron_notify() { else { $target_language = $default_language; } - drupal_mail('update', 'status_notify', $target, $target_language, $params); + $message = drupal_mail('update', 'status_notify', $target, $target_language, $params); + // Track when the last mail was successfully sent to avoid sending + // too many e-mails. + if ($message['result']) { + variable_set('update_last_email_notification', REQUEST_TIME); + } } } } diff --git a/core/modules/update/update.install b/core/modules/update/update.install index 9ff39d1..ddd16f9 100644 --- a/core/modules/update/update.install +++ b/core/modules/update/update.install @@ -83,6 +83,7 @@ function update_uninstall() { 'update_check_frequency', 'update_fetch_url', 'update_last_check', + 'update_last_email_notification', 'update_notification_threshold', 'update_notify_emails', 'update_max_fetch_attempts', diff --git a/core/modules/update/update.module b/core/modules/update/update.module index 4b3eab2..44e20a6 100644 --- a/core/modules/update/update.module +++ b/core/modules/update/update.module @@ -294,13 +294,18 @@ function update_cron() { // configured notifications about the new status. update_refresh(); update_fetch_data(); - _update_cron_notify(); } else { // Otherwise, see if any individual projects are now stale or still // missing data, and if so, try to fetch the data. update_get_available(TRUE); } + if ((REQUEST_TIME - variable_get('update_last_email_notification', 0)) > $interval) { + // If configured time between notifications elapsed, send email about + // updates possibly available. + module_load_include('inc', 'update', 'update.fetch'); + _update_cron_notify(); + } // Clear garbage from disk. update_clear_update_disk_cache();