diff options
-rw-r--r-- | Bugzilla/BugMail.pm | 18 | ||||
-rw-r--r-- | Bugzilla/Flag.pm | 13 | ||||
-rw-r--r-- | Bugzilla/Mailer.pm | 29 | ||||
-rw-r--r-- | template/en/default/request/email.txt.tmpl | 1 |
4 files changed, 39 insertions, 22 deletions
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index 20bb7e254..4e91d4be4 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -636,22 +636,6 @@ sub sendMail { push(@watchingrel, 'None') unless @watchingrel; push @watchingrel, map { user_id_to_login($_) } @$watchingRef; - my $sitespec = '@' . Bugzilla->params->{'urlbase'}; - $sitespec =~ s/:\/\//\./; # Make the protocol look like part of the domain - $sitespec =~ s/^([^:\/]+):(\d+)/$1/; # Remove a port number, to relocate - if ($2) { - $sitespec = "-$2$sitespec"; # Put the port number back in, before the '@' - } - my $threadingmarker; - if ($isnew) { - $threadingmarker = "Message-ID: <bug-$id-" . $user->id . "$sitespec>"; - } - else { - $threadingmarker = "In-Reply-To: <bug-$id-" . $user->id . "$sitespec>" . - "\nReferences: <bug-$id-" . $user->id . "$sitespec>"; - } - - my $vars = { isnew => $isnew, to => $user->email, @@ -678,7 +662,7 @@ sub sendMail { reporter => $values{'reporter'}, reportername => Bugzilla::User->new({name => $values{'reporter'}})->name, diffs => $diffs, - threadingmarker => $threadingmarker + threadingmarker => build_thread_marker($id, $user->id, $isnew), }; my $msg; diff --git a/Bugzilla/Flag.pm b/Bugzilla/Flag.pm index 73266ce9f..8201a907d 100644 --- a/Bugzilla/Flag.pm +++ b/Bugzilla/Flag.pm @@ -1104,10 +1104,15 @@ sub notify { } foreach my $to (keys %recipients) { - my $vars = { 'flag' => $flag, - 'to' => $to, - 'bug' => $bug, - 'attachment' => $attachment}; + # Add threadingmarker to allow flag notification emails to be the + # threaded similar to normal bug change emails. + my $thread_user_id = $recipients{$to} ? $recipients{$to}->id : 0; + + my $vars = { 'flag' => $flag, + 'to' => $to, + 'bug' => $bug, + 'attachment' => $attachment, + 'threadingmarker' => build_thread_marker($bug->id, $thread_user_id) }; my $lang = $recipients{$to} ? $recipients{$to}->settings->{'lang'}->{'value'} : $default_lang; diff --git a/Bugzilla/Mailer.pm b/Bugzilla/Mailer.pm index 5c7a75450..c790d179f 100644 --- a/Bugzilla/Mailer.pm +++ b/Bugzilla/Mailer.pm @@ -35,7 +35,7 @@ package Bugzilla::Mailer; use strict; use base qw(Exporter); -@Bugzilla::Mailer::EXPORT = qw(MessageToMTA); +@Bugzilla::Mailer::EXPORT = qw(MessageToMTA build_thread_marker); use Bugzilla::Constants; use Bugzilla::Error; @@ -154,4 +154,31 @@ sub MessageToMTA { } } +# Builds header suitable for use as a threading marker in email notifications +sub build_thread_marker { + my ($bug_id, $user_id, $is_new) = @_; + + if (!defined $user_id) { + $user_id = Bugzilla->user->id; + } + + my $sitespec = '@' . Bugzilla->params->{'urlbase'}; + $sitespec =~ s/:\/\//\./; # Make the protocol look like part of the domain + $sitespec =~ s/^([^:\/]+):(\d+)/$1/; # Remove a port number, to relocate + if ($2) { + $sitespec = "-$2$sitespec"; # Put the port number back in, before the '@' + } + + my $threadingmarker; + if ($is_new) { + $threadingmarker = "Message-ID: <bug-$bug_id-$user_id$sitespec>"; + } + else { + $threadingmarker = "In-Reply-To: <bug-$bug_id-$user_id$sitespec>" . + "\nReferences: <bug-$bug_id-$user_id$sitespec>"; + } + + return $threadingmarker; +} + 1; diff --git a/template/en/default/request/email.txt.tmpl b/template/en/default/request/email.txt.tmpl index cb18c0f4f..81948c42c 100644 --- a/template/en/default/request/email.txt.tmpl +++ b/template/en/default/request/email.txt.tmpl @@ -49,6 +49,7 @@ Subject: [% flag.type.name %] [%+ subject_status %]: [[% terms.Bug %] [%+ bug.bu [%- IF attachment %] : [Attachment [% attachment.id %]] [% attachment.description %][% END %] X-Bugzilla-Type: request +[%+ threadingmarker %] [%+ USE wrap -%] [%- FILTER bullet = wrap(80) -%] |