MDL-52997 forum: Add more robust threading email headers

This commit is contained in:
Brendan Heywood
2016-02-11 20:38:20 +11:00
parent d6b44eeea2
commit d3a744ddf1
+24 -6
View File
@@ -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 ', '');