Project

General

Profile

Feature #13359 ยป 13359.patch

Go MAEDA, 2024-07-20 05:41

View differences:

app/models/mailer.rb
661 661
  end
662 662

  
663 663
  def mail(headers={}, &block)
664
    # Add a display name to the From field if Setting.mail_from does not
665
    # include it
666 664
    begin
665
      # Add a display name to the From field if Setting.mail_from does not
666
      # include it
667 667
      mail_from = Mail::Address.new(Setting.mail_from)
668 668
      if mail_from.display_name.blank? && mail_from.comments.blank?
669 669
        mail_from.display_name =
670 670
          @author&.logged? ? @author.name : Setting.app_title
671 671
      end
672 672
      from = mail_from.format
673
      list_id = "<#{mail_from.address.to_s.tr('@', '.')}>"
673

  
674
      # Construct the value of the List-Id header field
675
      from_addr = mail_from.address.to_s
676
      project_identifier = self.headers['X-Redmine-Project']&.value
677
      list_id = if project_identifier.present?
678
                  "<#{project_identifier}.#{from_addr.tr('@', '.')}>"
679
                else
680
                  # Emails outside of a project context
681
                  "<#{from_addr.tr('@', '.')}>"
682
                end
674 683
    rescue Mail::Field::IncompleteParseError
675 684
      # Use Setting.mail_from as it is if Mail::Address cannot parse it
676 685
      # (probably the emission address is not RFC compliant)
test/unit/mailer_test.rb
220 220
    assert_equal 'All', mail.header['X-Auto-Response-Suppress'].to_s
221 221
    assert_equal 'auto-generated', mail.header['Auto-Submitted'].to_s
222 222
    # List-Id should not include the display name "Redmine"
223
    assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
223
    assert_equal '<ecookbook.redmine.example.net>', mail.header['List-Id'].to_s
224 224
    assert_equal 'Bug', mail.header['X-Redmine-Issue-Tracker'].to_s
225 225
    assert_equal 'Low', mail.header['X-Redmine-Issue-Priority'].to_s
226 226
  end
......
327 327
    end
328 328
  end
329 329

  
330
  def test_list_id_header_should_include_project_identifier
331
    with_settings :mail_from => 'redmine@example.net' do
332
      content = WikiContent.find(1)
333
      Mailer.deliver_wiki_content_added(content)
334
      mail = last_email
335
      assert_equal '<ecookbook.redmine.example.net>', mail.header['List-Id'].to_s
336
    end
337
  end
338

  
339
  def test_list_id_header_excludes_project_identifier_for_non_project_emails
340
    with_settings :mail_from => 'redmine@example.net' do
341
      Mailer.deliver_test_email(User.find(1))
342
      mail = last_email
343
      assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
344
    end
345
  end
346

  
330 347
  def test_should_not_send_email_without_recipient
331 348
    news = News.first
332 349
    user = news.author
    (1-1/1)