Skip to content

Commit

Permalink
MDL-52997 forum: Add more robust threading email headers
Browse files Browse the repository at this point in the history
  • Loading branch information
brendanheywood committed Feb 11, 2016
1 parent 288f92e commit 58a10b8
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions mod/forum/lib.php
Expand Up @@ -760,12 +760,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.
Expand Down Expand Up @@ -804,6 +798,30 @@ function forum_cron() {
$a->subject = $data->get_subject();
$postsubject = html_to_text(get_string('postmailsubject', 'forum', $a), 0);

$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 ', '');

Expand Down

0 comments on commit 58a10b8

Please sign in to comment.