1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-02-01 03:57:15 +00:00

Add project identifier to List-Id header in notification emails (#13359).

Patch by Go MAEDA (user:maeda).


git-svn-id: https://svn.redmine.org/redmine/trunk@22944 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA 2024-07-26 03:19:22 +00:00
parent acd1e2def8
commit fded8025d5
2 changed files with 31 additions and 9 deletions

View File

@ -661,16 +661,25 @@ class Mailer < ActionMailer::Base
end
def mail(headers={}, &block)
# Add a display name to the From field if Setting.mail_from does not
# include it
begin
# Add a display name to the From field if Setting.mail_from does not
# include it
mail_from = Mail::Address.new(Setting.mail_from)
if mail_from.display_name.blank? && mail_from.comments.blank?
mail_from.display_name =
@author&.logged? ? @author.name : Setting.app_title
end
from = mail_from.format
list_id = "<#{mail_from.address.to_s.tr('@', '.')}>"
# Construct the value of the List-Id header field
from_addr = mail_from.address.to_s
project_identifier = self.headers['X-Redmine-Project']&.value
list_id = if project_identifier.present?
"<#{project_identifier}.#{from_addr.tr('@', '.')}>"
else
# Emails outside of a project context
"<#{from_addr.tr('@', '.')}>"
end
rescue Mail::Field::IncompleteParseError
# Use Setting.mail_from as it is if Mail::Address cannot parse it
# (probably the emission address is not RFC compliant)

View File

@ -212,15 +212,11 @@ class MailerTest < ActiveSupport::TestCase
end
def test_email_headers
with_settings :mail_from => 'Redmine <redmine@example.net>' do
issue = Issue.find(1)
Mailer.deliver_issue_add(issue)
end
issue = Issue.find(1)
Mailer.deliver_issue_add(issue)
mail = last_email
assert_equal 'All', mail.header['X-Auto-Response-Suppress'].to_s
assert_equal 'auto-generated', mail.header['Auto-Submitted'].to_s
# List-Id should not include the display name "Redmine"
assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
assert_equal 'Bug', mail.header['X-Redmine-Issue-Tracker'].to_s
assert_equal 'Low', mail.header['X-Redmine-Issue-Priority'].to_s
end
@ -327,6 +323,23 @@ class MailerTest < ActiveSupport::TestCase
end
end
def test_list_id_header_should_include_project_identifier
with_settings :mail_from => 'Redmine <redmine@example.net>' do
content = WikiContent.find(1)
Mailer.deliver_wiki_content_added(content)
mail = last_email
assert_equal '<ecookbook.redmine.example.net>', mail.header['List-Id'].to_s
end
end
def test_list_id_header_excludes_project_identifier_for_non_project_emails
with_settings :mail_from => 'Redmine <redmine@example.net>' do
Mailer.deliver_test_email(User.find(1))
mail = last_email
assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
end
end
def test_should_not_send_email_without_recipient
news = News.first
user = news.author