Commit 17858d49f6b189c922c7a69e94b5d8aa96fb48ad

Authored by Dmitriy Zaporozhets
2 parents 3ea4bf48 a7bdf87f

Merge pull request #6109 from jamit/master

Added email threading for update emails on issues and merge requests
app/mailers/emails/issues.rb
... ... @@ -4,6 +4,7 @@ module Emails
4 4 @issue = Issue.find(issue_id)
5 5 @project = @issue.project
6 6 @target_url = project_issue_url(@project, @issue)
  7 + set_message_id("issue_#{issue_id}")
7 8 mail(from: sender(@issue.author_id),
8 9 to: recipient(recipient_id),
9 10 subject: subject("#{@issue.title} (##{@issue.iid})"))
... ... @@ -14,6 +15,7 @@ module Emails
14 15 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id
15 16 @project = @issue.project
16 17 @target_url = project_issue_url(@project, @issue)
  18 + set_reference("issue_#{issue_id}")
17 19 mail(from: sender(updated_by_user_id),
18 20 to: recipient(recipient_id),
19 21 subject: subject("#{@issue.title} (##{@issue.iid})"))
... ... @@ -24,6 +26,7 @@ module Emails
24 26 @project = @issue.project
25 27 @updated_by = User.find updated_by_user_id
26 28 @target_url = project_issue_url(@project, @issue)
  29 + set_reference("issue_#{issue_id}")
27 30 mail(from: sender(updated_by_user_id),
28 31 to: recipient(recipient_id),
29 32 subject: subject("#{@issue.title} (##{@issue.iid})"))
... ... @@ -35,6 +38,7 @@ module Emails
35 38 @project = @issue.project
36 39 @updated_by = User.find updated_by_user_id
37 40 @target_url = project_issue_url(@project, @issue)
  41 + set_reference("issue_#{issue_id}")
38 42 mail(from: sender(updated_by_user_id),
39 43 to: recipient(recipient_id),
40 44 subject: subject("#{@issue.title} (##{@issue.iid})"))
... ...
app/mailers/emails/merge_requests.rb
... ... @@ -4,6 +4,7 @@ module Emails
4 4 @merge_request = MergeRequest.find(merge_request_id)
5 5 @project = @merge_request.project
6 6 @target_url = project_merge_request_url(@project, @merge_request)
  7 + set_message_id("merge_request_#{merge_request_id}")
7 8 mail(from: sender(@merge_request.author_id),
8 9 to: recipient(recipient_id),
9 10 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
... ... @@ -14,6 +15,7 @@ module Emails
14 15 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id
15 16 @project = @merge_request.project
16 17 @target_url = project_merge_request_url(@project, @merge_request)
  18 + set_reference("merge_request_#{merge_request_id}")
17 19 mail(from: sender(updated_by_user_id),
18 20 to: recipient(recipient_id),
19 21 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
... ... @@ -24,6 +26,7 @@ module Emails
24 26 @updated_by = User.find updated_by_user_id
25 27 @project = @merge_request.project
26 28 @target_url = project_merge_request_url(@project, @merge_request)
  29 + set_reference("merge_request_#{merge_request_id}")
27 30 mail(from: sender(updated_by_user_id),
28 31 to: recipient(recipient_id),
29 32 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
... ... @@ -33,6 +36,7 @@ module Emails
33 36 @merge_request = MergeRequest.find(merge_request_id)
34 37 @project = @merge_request.project
35 38 @target_url = project_merge_request_url(@project, @merge_request)
  39 + set_reference("merge_request_#{merge_request_id}")
36 40 mail(from: sender(updated_by_user_id),
37 41 to: recipient(recipient_id),
38 42 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
... ...
app/mailers/emails/notes.rb
... ... @@ -15,6 +15,7 @@ module Emails
15 15 @issue = @note.noteable
16 16 @project = @note.project
17 17 @target_url = project_issue_url(@project, @issue, anchor: "note_#{@note.id}")
  18 + set_reference("issue_#{@issue.id}")
18 19 mail(from: sender(@note.author_id),
19 20 to: recipient(recipient_id),
20 21 subject: subject("#{@issue.title} (##{@issue.iid})"))
... ... @@ -25,6 +26,7 @@ module Emails
25 26 @merge_request = @note.noteable
26 27 @project = @note.project
27 28 @target_url = project_merge_request_url(@project, @merge_request, anchor: "note_#{@note.id}")
  29 + set_reference("merge_request_#{@merge_request.id}")
28 30 mail(from: sender(@note.author_id),
29 31 to: recipient(recipient_id),
30 32 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
... ...
app/mailers/notify.rb
... ... @@ -53,6 +53,22 @@ class Notify < ActionMailer::Base
53 53 end
54 54 end
55 55  
  56 + # Set the Message-ID header field
  57 + #
  58 + # local_part - The local part of the message ID
  59 + #
  60 + def set_message_id(local_part)
  61 + headers["Message-ID"] = "<#{local_part}@#{Gitlab.config.gitlab.host}>"
  62 + end
  63 +
  64 + # Set the References header field
  65 + #
  66 + # local_part - The local part of the referenced message ID
  67 + #
  68 + def set_reference(local_part)
  69 + headers["References"] = "<#{local_part}@#{Gitlab.config.gitlab.host}>"
  70 + end
  71 +
56 72 # Formats arguments into a String suitable for use as an email subject
57 73 #
58 74 # extra - Extra Strings to be inserted into the subject
... ...
spec/mailers/notify_spec.rb
... ... @@ -161,6 +161,10 @@ describe Notify do
161 161 it 'contains a link to the new issue' do
162 162 should have_body_text /#{project_issue_path project, issue}/
163 163 end
  164 +
  165 + it 'has the correct message-id set' do
  166 + should have_header 'Message-ID', "<issue_#{issue.id}@#{Gitlab.config.gitlab.host}>"
  167 + end
164 168 end
165 169  
166 170 describe 'that are new with a description' do
... ... @@ -197,6 +201,10 @@ describe Notify do
197 201 it 'contains a link to the issue' do
198 202 should have_body_text /#{project_issue_path project, issue}/
199 203 end
  204 +
  205 + it 'has the correct reference set' do
  206 + should have_header 'References', "<issue_#{issue.id}@#{Gitlab.config.gitlab.host}>"
  207 + end
200 208 end
201 209  
202 210 describe 'status changed' do
... ... @@ -224,6 +232,10 @@ describe Notify do
224 232 it 'contains a link to the issue' do
225 233 should have_body_text /#{project_issue_path project, issue}/
226 234 end
  235 +
  236 + it 'has the correct reference set' do
  237 + should have_header 'References', "<issue_#{issue.id}@#{Gitlab.config.gitlab.host}>"
  238 + end
227 239 end
228 240  
229 241 end
... ... @@ -253,6 +265,10 @@ describe Notify do
253 265 it 'contains the target branch for the merge request' do
254 266 should have_body_text /#{merge_request.target_branch}/
255 267 end
  268 +
  269 + it 'has the correct message-id set' do
  270 + should have_header 'Message-ID', "<merge_request_#{merge_request.id}@#{Gitlab.config.gitlab.host}>"
  271 + end
256 272 end
257 273  
258 274 describe 'that are new with a description' do
... ... @@ -313,6 +329,10 @@ describe Notify do
313 329 it 'contains a link to the merge request' do
314 330 should have_body_text /#{project_merge_request_path project, merge_request}/
315 331 end
  332 +
  333 + it 'has the correct reference set' do
  334 + should have_header 'References', "<merge_request_#{merge_request.id}@#{Gitlab.config.gitlab.host}>"
  335 + end
316 336 end
317 337 end
318 338 end
... ...