Commit 06bed543e69c16d4c267d1bd49e879c3e9b761e9

Authored by Philip Blatter
1 parent aeb5a01e

Added email threading for update emails on issues and merge requests (if the mai…

…l client support the References: mail header)
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.iid}")
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.iid}")
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