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,6 +4,7 @@ module Emails
4 @issue = Issue.find(issue_id) 4 @issue = Issue.find(issue_id)
5 @project = @issue.project 5 @project = @issue.project
6 @target_url = project_issue_url(@project, @issue) 6 @target_url = project_issue_url(@project, @issue)
  7 + set_message_id("issue_#{issue_id}")
7 mail(from: sender(@issue.author_id), 8 mail(from: sender(@issue.author_id),
8 to: recipient(recipient_id), 9 to: recipient(recipient_id),
9 subject: subject("#{@issue.title} (##{@issue.iid})")) 10 subject: subject("#{@issue.title} (##{@issue.iid})"))
@@ -14,6 +15,7 @@ module Emails @@ -14,6 +15,7 @@ module Emails
14 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id 15 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id
15 @project = @issue.project 16 @project = @issue.project
16 @target_url = project_issue_url(@project, @issue) 17 @target_url = project_issue_url(@project, @issue)
  18 + set_reference("issue_#{issue_id}")
17 mail(from: sender(updated_by_user_id), 19 mail(from: sender(updated_by_user_id),
18 to: recipient(recipient_id), 20 to: recipient(recipient_id),
19 subject: subject("#{@issue.title} (##{@issue.iid})")) 21 subject: subject("#{@issue.title} (##{@issue.iid})"))
@@ -24,6 +26,7 @@ module Emails @@ -24,6 +26,7 @@ module Emails
24 @project = @issue.project 26 @project = @issue.project
25 @updated_by = User.find updated_by_user_id 27 @updated_by = User.find updated_by_user_id
26 @target_url = project_issue_url(@project, @issue) 28 @target_url = project_issue_url(@project, @issue)
  29 + set_reference("issue_#{issue_id}")
27 mail(from: sender(updated_by_user_id), 30 mail(from: sender(updated_by_user_id),
28 to: recipient(recipient_id), 31 to: recipient(recipient_id),
29 subject: subject("#{@issue.title} (##{@issue.iid})")) 32 subject: subject("#{@issue.title} (##{@issue.iid})"))
@@ -35,6 +38,7 @@ module Emails @@ -35,6 +38,7 @@ module Emails
35 @project = @issue.project 38 @project = @issue.project
36 @updated_by = User.find updated_by_user_id 39 @updated_by = User.find updated_by_user_id
37 @target_url = project_issue_url(@project, @issue) 40 @target_url = project_issue_url(@project, @issue)
  41 + set_reference("issue_#{issue_id}")
38 mail(from: sender(updated_by_user_id), 42 mail(from: sender(updated_by_user_id),
39 to: recipient(recipient_id), 43 to: recipient(recipient_id),
40 subject: subject("#{@issue.title} (##{@issue.iid})")) 44 subject: subject("#{@issue.title} (##{@issue.iid})"))
app/mailers/emails/merge_requests.rb
@@ -4,6 +4,7 @@ module Emails @@ -4,6 +4,7 @@ module Emails
4 @merge_request = MergeRequest.find(merge_request_id) 4 @merge_request = MergeRequest.find(merge_request_id)
5 @project = @merge_request.project 5 @project = @merge_request.project
6 @target_url = project_merge_request_url(@project, @merge_request) 6 @target_url = project_merge_request_url(@project, @merge_request)
  7 + set_message_id("merge_request_#{merge_request_id}")
7 mail(from: sender(@merge_request.author_id), 8 mail(from: sender(@merge_request.author_id),
8 to: recipient(recipient_id), 9 to: recipient(recipient_id),
9 subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) 10 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
@@ -14,6 +15,7 @@ module Emails @@ -14,6 +15,7 @@ module Emails
14 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id 15 @previous_assignee = User.find_by(id: previous_assignee_id) if previous_assignee_id
15 @project = @merge_request.project 16 @project = @merge_request.project
16 @target_url = project_merge_request_url(@project, @merge_request) 17 @target_url = project_merge_request_url(@project, @merge_request)
  18 + set_reference("merge_request_#{merge_request_id}")
17 mail(from: sender(updated_by_user_id), 19 mail(from: sender(updated_by_user_id),
18 to: recipient(recipient_id), 20 to: recipient(recipient_id),
19 subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) 21 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
@@ -24,6 +26,7 @@ module Emails @@ -24,6 +26,7 @@ module Emails
24 @updated_by = User.find updated_by_user_id 26 @updated_by = User.find updated_by_user_id
25 @project = @merge_request.project 27 @project = @merge_request.project
26 @target_url = project_merge_request_url(@project, @merge_request) 28 @target_url = project_merge_request_url(@project, @merge_request)
  29 + set_reference("merge_request_#{merge_request_id}")
27 mail(from: sender(updated_by_user_id), 30 mail(from: sender(updated_by_user_id),
28 to: recipient(recipient_id), 31 to: recipient(recipient_id),
29 subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) 32 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
@@ -33,6 +36,7 @@ module Emails @@ -33,6 +36,7 @@ module Emails
33 @merge_request = MergeRequest.find(merge_request_id) 36 @merge_request = MergeRequest.find(merge_request_id)
34 @project = @merge_request.project 37 @project = @merge_request.project
35 @target_url = project_merge_request_url(@project, @merge_request) 38 @target_url = project_merge_request_url(@project, @merge_request)
  39 + set_reference("merge_request_#{merge_request_id}")
36 mail(from: sender(updated_by_user_id), 40 mail(from: sender(updated_by_user_id),
37 to: recipient(recipient_id), 41 to: recipient(recipient_id),
38 subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) 42 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
app/mailers/emails/notes.rb
@@ -15,6 +15,7 @@ module Emails @@ -15,6 +15,7 @@ module Emails
15 @issue = @note.noteable 15 @issue = @note.noteable
16 @project = @note.project 16 @project = @note.project
17 @target_url = project_issue_url(@project, @issue, anchor: "note_#{@note.id}") 17 @target_url = project_issue_url(@project, @issue, anchor: "note_#{@note.id}")
  18 + set_reference("issue_#{@issue.id}")
18 mail(from: sender(@note.author_id), 19 mail(from: sender(@note.author_id),
19 to: recipient(recipient_id), 20 to: recipient(recipient_id),
20 subject: subject("#{@issue.title} (##{@issue.iid})")) 21 subject: subject("#{@issue.title} (##{@issue.iid})"))
@@ -25,6 +26,7 @@ module Emails @@ -25,6 +26,7 @@ module Emails
25 @merge_request = @note.noteable 26 @merge_request = @note.noteable
26 @project = @note.project 27 @project = @note.project
27 @target_url = project_merge_request_url(@project, @merge_request, anchor: "note_#{@note.id}") 28 @target_url = project_merge_request_url(@project, @merge_request, anchor: "note_#{@note.id}")
  29 + set_reference("merge_request_#{@merge_request.id}")
28 mail(from: sender(@note.author_id), 30 mail(from: sender(@note.author_id),
29 to: recipient(recipient_id), 31 to: recipient(recipient_id),
30 subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) 32 subject: subject("#{@merge_request.title} (##{@merge_request.iid})"))
app/mailers/notify.rb
@@ -53,6 +53,22 @@ class Notify < ActionMailer::Base @@ -53,6 +53,22 @@ class Notify < ActionMailer::Base
53 end 53 end
54 end 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 # Formats arguments into a String suitable for use as an email subject 72 # Formats arguments into a String suitable for use as an email subject
57 # 73 #
58 # extra - Extra Strings to be inserted into the subject 74 # extra - Extra Strings to be inserted into the subject
spec/mailers/notify_spec.rb
@@ -161,6 +161,10 @@ describe Notify do @@ -161,6 +161,10 @@ describe Notify do
161 it 'contains a link to the new issue' do 161 it 'contains a link to the new issue' do
162 should have_body_text /#{project_issue_path project, issue}/ 162 should have_body_text /#{project_issue_path project, issue}/
163 end 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 end 168 end
165 169
166 describe 'that are new with a description' do 170 describe 'that are new with a description' do
@@ -197,6 +201,10 @@ describe Notify do @@ -197,6 +201,10 @@ describe Notify do
197 it 'contains a link to the issue' do 201 it 'contains a link to the issue' do
198 should have_body_text /#{project_issue_path project, issue}/ 202 should have_body_text /#{project_issue_path project, issue}/
199 end 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 end 208 end
201 209
202 describe 'status changed' do 210 describe 'status changed' do
@@ -224,6 +232,10 @@ describe Notify do @@ -224,6 +232,10 @@ describe Notify do
224 it 'contains a link to the issue' do 232 it 'contains a link to the issue' do
225 should have_body_text /#{project_issue_path project, issue}/ 233 should have_body_text /#{project_issue_path project, issue}/
226 end 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 end 239 end
228 240
229 end 241 end
@@ -253,6 +265,10 @@ describe Notify do @@ -253,6 +265,10 @@ describe Notify do
253 it 'contains the target branch for the merge request' do 265 it 'contains the target branch for the merge request' do
254 should have_body_text /#{merge_request.target_branch}/ 266 should have_body_text /#{merge_request.target_branch}/
255 end 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 end 272 end
257 273
258 describe 'that are new with a description' do 274 describe 'that are new with a description' do
@@ -313,6 +329,10 @@ describe Notify do @@ -313,6 +329,10 @@ describe Notify do
313 it 'contains a link to the merge request' do 329 it 'contains a link to the merge request' do
314 should have_body_text /#{project_merge_request_path project, merge_request}/ 330 should have_body_text /#{project_merge_request_path project, merge_request}/
315 end 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 end 336 end
317 end 337 end
318 end 338 end