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 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.iid}")
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.iid}")
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
... ...