Project

General

Profile

Feature #35679 » 35679-prototype.patch

Felix Schäfer, 2021-08-03 22:09

View differences:

app/models/mail_handler.rb
546 546

  
547 547
    # Converts a plain/text email body to text
548 548
    def plain_text_body_to_text(text)
549
      return nil if MailHandler::EmptyContentPolicy.new(text).suppress?
549 550
      # Removes leading spaces that would cause the line to be rendered as
550 551
      # preformatted text with textile
551 552
      text.gsub(/^ +(?![*#])/, '')
......
644 645
  def find_assignee_from_keyword(keyword, issue)
645 646
    Principal.detect_by_keyword(issue.assignable_users, keyword)
646 647
  end
648

  
649
  class EmptyContentPolicy
650
    attr_accessor :text
651

  
652
    patterns = [
653
      '\AYour email client does not support HTML messages.\z',
654
      '\AKlicken Sie hier\p{Space}+http\p{Graph}+\p{Space}+für die Online-Version.\z'
655
    ]
656
    EMPTY_CONTENT_RE = Regexp.new(patterns.join('|'), Regexp::IGNORECASE)
657

  
658
    def initialize(text)
659
      self.text = text
660
    end
661

  
662
    def suppress?
663
      return true if text.chomp('') =~ EMPTY_CONTENT_RE
664

  
665
      false
666
    end
667
  end
647 668
end
test/fixtures/mail_handler/see_html_text_part.eml
1
From JSmith@somenet.foo  Fri Mar 22 08:30:28 2013
2
From: John Smith <JSmith@somenet.foo>
3
Content-Type: multipart/mixed; boundary="Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9"
4
Message-Id: <BB533668-3CC8-41CA-A951-0A5D8EA37FB0@somenet.foo>
5
Mime-Version: 1.0 (Mac OS X Mail 6.3 \(1503\))
6
Subject: Test with an empty text part
7
Date: Fri, 22 Mar 2013 17:30:20 +0200
8
To: redmine@somenet.foo
9
X-Mailer: Apple Mail (2.1503)
10

  
11

  
12

  
13
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
14
Content-Transfer-Encoding: quoted-printable
15
Content-Type: text/plain;
16
	charset=us-ascii
17

  
18
Your email client does not support HTML messages.
19

  
20

  
21
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
22
Content-Type: text/plain; charset=utf-8
23
Content-Transfer-Encoding: quoted-printable
24

  
25
Klicken Sie hier
26
 https://example.com
27

  
28
 f=C3=BCr die Online-Version.
29

  
30
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
31
Content-Transfer-Encoding: quoted-printable
32
Content-Type: text/html;
33
	charset=us-ascii
34

  
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww=
36
w.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
37
<html xmlns=3D"http://www.w3.org/1999/xhtml">
38
<head>
39
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" />
40
</head>
41
<body>
42
<p>The html part.</p>
43
</body>
44
</html>
45

  
46

  
47
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9--
test/unit/mail_handler_test.rb
713 713
    assert_equal 'The html part.', issue.description
714 714
  end
715 715

  
716
  def test_see_html_text_part_should_not_stop_looking_for_content
717
    issue = submit_email('see_html_text_part.eml', :issue => {:project => 'ecookbook'})
718
    assert_equal 'The html part.', issue.description
719
  end
720

  
716 721
  def test_empty_text_and_html_part_should_make_an_empty_description
717 722
    issue = submit_email('empty_text_and_html_part.eml', :issue => {:project => 'ecookbook'})
718 723
    assert_equal '', issue.description
    (1-1/1)