diff --git a/mod/forum/lib.php b/mod/forum/lib.php index efa1897f9f0..0dd89e1c421 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -747,12 +747,6 @@ function forum_cron() { 'Auto-Submitted: auto-generated', ); - if ($post->parent) { - // This post is a reply, so add headers for threading (see MDL-22551). - $userfrom->customheaders[] = 'In-Reply-To: ' . forum_get_email_message_id($post->parent, $userto->id, $hostname); - $userfrom->customheaders[] = 'References: ' . forum_get_email_message_id($post->parent, $userto->id, $hostname); - } - $shortname = format_string($course->shortname, true, array('context' => context_course::instance($course->id))); // Generate a reply-to address from using the Inbound Message handler. @@ -772,6 +766,30 @@ function forum_cron() { $posthtml = forum_make_mail_html($course, $cm, $forum, $discussion, $post, $userfrom, $userto, $replyaddress); + $rootid = forum_get_email_message_id($discussion->firstpost, $userto->id, $hostname); + + if ($post->parent) { + // This post is a reply, so add reply header (RFC 2822). + $parentid = forum_get_email_message_id($post->parent, $userto->id, $hostname); + $userfrom->customheaders[] = "In-Reply-To: $parentid"; + + // If the post is deeply nested we also reference the parent message id and + // the root message id (if different) to aid threading when parts of the email + // conversation have been deleted (RFC1036). + if ($post->parent != $discussion->firstpost) { + $userfrom->customheaders[] = "References: $rootid $parentid"; + } else { + $userfrom->customheaders[] = "References: $parentid"; + } + } + + // MS Outlook / Office uses poorly documented and non standard headers, including + // Thread-Topic which overrides the Subject and shouldn't contain Re: or Fwd: etc. + $a->subject = $discussion->name; + $postsubject = html_to_text(get_string('postmailsubject', 'forum', $a), 0); + $userfrom->customheaders[] = "Thread-Topic: $postsubject"; + $userfrom->customheaders[] = "Thread-Index: " . substr($rootid, 1, 28); + // Send the post now! mtrace('Sending ', '');