mjml-rails 4.1.0 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf24f6bc544ed49f738f3afb6dd288be522a8eac
4
- data.tar.gz: 0e4f7e9b607039a2619c12f34202e3c63be9ec91
3
+ metadata.gz: 8cc88d6b14f96fbfe78ac00b83250ab72a874d6a
4
+ data.tar.gz: 2fcde96e13cabd54474394cbca661c2936f03750
5
5
  SHA512:
6
- metadata.gz: 169a7f232e534cbcb29a660ea166b0b7c54eee8f2c327b611131996ae9747f2a6c2617be96d02b62bb8d7e5181c5307f50c7bc933015c02eb8d343822bb53e7c
7
- data.tar.gz: 7e679743fb0053909d30237d31ca300258b4114679eb39cf107b778f2477b272d077cfb65e3b8ff77ff6797a27f2bfa8499e87c873abc8b3e5c3c5d20d1d3467
6
+ metadata.gz: 18b50259d07cc0ef7b1d4c15b4d587a5c3379ea859b9468de54222e562a0c86c83b468be2b4160c36695b1d2ce42cd2454e9145fbbf632bed6207d522810913c
7
+ data.tar.gz: 51dcfa5a5d08b911bb3ad2ab276c52edbc39510f184d84562f672d27c19454677b32b55a65680bd4acd7c35421d25cf81287a19378e102bf33c71cb01b8beec8
@@ -1 +1,2 @@
1
- ���‘yl��ga �.���~p�v���2xR#�t6����0<ۏi���_���;�����
1
+ �� �� ��K��9H�@�$��-�tE������e��������"bl
2
+ �'N�mQӇ�]��2�-������ԵZ�V�`�}��,�iZ@\��,� &��J������X�� V{w��0�`�&�����[*>K����w���H�G �\��FY>�w�c�ɬ��<~�9e��\�{��y�$��Wu�B� ..���Z��8�?�=حÏ����H9�` DSO�x8(ꚁ`0�Mܚ��)
data.tar.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  An example template might look like:
8
8
 
9
9
  ```erb
10
- <!-- ./app/views/user_mailer/email.mjml -->
10
+ <!-- ./app/views/user_mailer/email.html.mjml -->
11
11
  <mjml>
12
12
  <mj-head>
13
13
  <mj-preview>Hello World</mj-preview>
@@ -16,7 +16,7 @@ An example template might look like:
16
16
  <mj-section>
17
17
  <mj-column>
18
18
  <mj-text>Hello World</mj-text>
19
- <%= render :partial => 'info', :formats => [:html] %>
19
+ <%= render partial: "info" %>
20
20
  </mj-column>
21
21
  </mj-section>
22
22
  </mj-body>
@@ -26,19 +26,19 @@ An example template might look like:
26
26
  And the partial `_info.mjml`:
27
27
 
28
28
  ```erb
29
- <!-- ./app/views/user_mailer/_info.mjml -->
29
+ <!-- ./app/views/user_mailer/_info.html.erb -->
30
30
  <mj-text>This is <%= @user.username %></mj-text>
31
31
  ```
32
32
 
33
- * Notice you can use ERb and partials inside the template.
33
+ * Notice you can use ERB and partials inside the template.
34
34
 
35
35
  Your `user_mailer.rb` might look like this::
36
36
 
37
37
  ```ruby
38
38
  # ./app/mailers/user_mailer.rb
39
39
  class UserMailer < ActionMailer::Base
40
- def user_signup_confirmation()
41
- mail(to: 'test@example.com', subject: 'test') do |format|
40
+ def user_signup_confirmation
41
+ mail(to: "user@example.com", from: "app@example.com") do |format|
42
42
  format.text
43
43
  format.mjml
44
44
  end
@@ -86,9 +86,9 @@ Mjml.setup do |config|
86
86
  end
87
87
  ```
88
88
 
89
- ### MJML v3.x & v4.0.x support
89
+ ### MJML v3.x & v4.x support
90
90
 
91
- Version 4.0.x of this gem brings support for MJML 4.0.x
91
+ Version 4.x of this gem brings support for MJML 4.x
92
92
 
93
93
  Version 2.3.x and 2.4.x of this gem brings support for MJML 3.x
94
94
 
@@ -116,67 +116,57 @@ npm install -g mjml@3.3.5
116
116
 
117
117
  ## Using Email Layouts
118
118
 
119
+ *Note*: [Aleksandrs Ļedovskis](https://github.com/aleksandrs-ledovskis) kindly updated the gem for better Rails Email Layouts support - it should be a non-breaking change, but check the updated file naming below if you experience problems.
120
+
119
121
  Mailer:
120
122
  ```ruby
121
- # mailers/foo_mailer.rb
123
+ # mailers/my_mailer.rb
122
124
  class MyMailer < ActionMailer::Base
123
125
  layout "default"
124
126
 
125
- def mail_template(template_name, recipient, subject, **params)
126
- mail(
127
- to: recipient.email,
128
- from: ENV["MAILER_FROM"],
129
- subject: subject
130
- ) do |format|
131
- format.mjml { render template_name, locals: { recipient: recipient }.merge(params) }
132
- end
133
- end
127
+ def foo_bar(user)
128
+ @recipient = user
134
129
 
135
- # this function is called to send the email
136
- def foo(item, user)
137
- mail_template(
138
- "foo_bar",
139
- user,
140
- "email subject",
141
- request: item
142
- )
130
+ mail(to: user.email, from: "app@example.com") do |format|
131
+ format.html
132
+ end
143
133
  end
144
134
  end
145
135
  ```
146
136
 
147
137
  Email layout:
148
138
  ```html
149
- <!-- views/layouts/default.mjml -->
139
+ <!-- views/layouts/default.html.mjml -->
150
140
  <mjml>
151
- <mj-body>
152
- <%= yield %>
153
- </mj-body>
141
+ <mj-body>
142
+ <%= yield %>
143
+ </mj-body>
154
144
  </mjml>
155
145
  ```
156
146
 
157
147
  Email view:
158
148
  ```html
159
- <!-- views/my_mailer/foo_bar.mjml.erb -->
160
- <%= render partial: "to", formats: [:html], locals: { name: recipient.name } %>
149
+ <!-- views/my_mailer/foo_bar.html.erb -->
150
+ <%= render partial: "to" %>
161
151
 
162
152
  <mj-section>
163
- <mj-column>
164
- <mj-text>
165
- Hello <%= recipient.name %>!
166
- </mj-text>
167
- </mj-column>
153
+ <mj-column>
154
+ <mj-text>
155
+ Something foo regarding bar!
156
+ </mj-text>
157
+ </mj-column>
168
158
  </mj-section>
169
159
  ```
170
160
 
171
161
  Email partial:
172
162
  ```html
173
- <!-- views/my_mailer/_to.mjml -->
163
+ <!-- views/my_mailer/_to.html.erb -->
174
164
  <mj-section>
175
- <mj-column>
176
- <mj-text>
177
- <%= name %>,
178
- </mj-text>
179
- </mj-column>
165
+ <mj-column>
166
+ <mj-text>
167
+ Hello <%= @recipient.name %>,
168
+ </mj-text>
169
+ </mj-column>
180
170
  </mj-section>
181
171
  ```
182
172
 
@@ -268,14 +258,15 @@ If you discover any bugs, feel free to create an issue on GitHub. Please add as
268
258
 
269
259
  * Simon Loffler [github.com/sighmon](https://github.com/sighmon)
270
260
  * Steven Pickles [github.com/thatpixguy](https://github.com/thatpixguy)
261
+ * [The Rails community](https://github.com/sighmon/mjml-rails/pulls?q=is%3Apr+is%3Aclosed). :-)
271
262
 
272
263
  ## Other similar gems
273
264
 
274
- * [srghma/mjml-premailer](https://github.com/srghma/mjml-premailer) - supports `/app/views/layouts`
265
+ * [srghma/mjml-premailer](https://github.com/srghma/mjml-premailer)
275
266
  * [kolybasov/mjml-ruby/](https://github.com/kolybasov/mjml-ruby/)
276
267
 
277
268
  ## License
278
269
 
279
- MIT License. Copyright 2016 Simon Loffler. [sighmon.com](http://sighmon.com)
270
+ MIT License. Copyright 2018 Simon Loffler. [sighmon.com](http://sighmon.com)
280
271
 
281
272
  Lovingly built on [github.com/plataformatec/markerb](https://github.com/plataformatec/markerb)
@@ -5,10 +5,10 @@ module Mjml
5
5
  class MailerGenerator < Erb::Generators::MailerGenerator
6
6
  source_root File.expand_path("../templates", __FILE__)
7
7
 
8
- protected
8
+ private
9
9
 
10
10
  def format
11
- nil # Our templates have no format
11
+ :html
12
12
  end
13
13
 
14
14
  def formats
@@ -18,6 +18,17 @@ module Mjml
18
18
  def handler
19
19
  :mjml
20
20
  end
21
+
22
+ def view_handler
23
+ Mjml.template_language
24
+ end
25
+
26
+ def filename_with_extensions(name, file_format = format)
27
+ # Due to MJML single-pass processing nature
28
+ # layout files MUST have .mjml extension, but views/templates cannot
29
+ is_layout_file = name.in?([:layout, "mailer"])
30
+ [name, file_format, is_layout_file ? handler : view_handler].compact.join(".")
31
+ end
21
32
  end
22
33
  end
23
34
  end
@@ -0,0 +1,5 @@
1
+ <mjml>
2
+ <mj-body>
3
+ <%%= yield %>
4
+ </mj-body>
5
+ </mjml>
@@ -41,7 +41,15 @@ module Mjml
41
41
 
42
42
  def call(template)
43
43
  compiled_source = template_handler.call(template)
44
- if template.formats.include?(:mjml)
44
+
45
+ # Per MJML v4 syntax documentation[0] valid/render'able document MUST start with <mjml> root tag
46
+ # If we get here and template source doesn't start with one it means
47
+ # that we are rendering partial named according to legacy naming convention (partials ending with '.mjml')
48
+ # Therefore we skip MJML processing and return raw compiled source. It will be processed
49
+ # by MJML library when top-level layout/template is rendered
50
+ #
51
+ # [0] - https://github.com/mjmlio/mjml/blob/master/doc/guide.md#mjml
52
+ if template.source =~ /<mjml>/
45
53
  "Mjml::Mjmltemplate.to_html(begin;#{compiled_source};end).html_safe"
46
54
  else
47
55
  compiled_source
@@ -1,4 +1,4 @@
1
1
  module Mjml
2
2
  # Version number no longer matches MJML.io version
3
- VERSION = "4.1.0"
3
+ VERSION = "4.2.0"
4
4
  end
@@ -9,8 +9,18 @@ class GeneratorTest < Rails::Generators::TestCase
9
9
  test "assert all views are properly created with given name" do
10
10
  run_generator %w(notifier foo bar baz)
11
11
 
12
- assert_file "app/views/notifier/foo.mjml"
13
- assert_file "app/views/notifier/bar.mjml"
14
- assert_file "app/views/notifier/baz.mjml"
12
+ assert_file "app/views/layouts/mailer.html.mjml" do |mailer|
13
+ assert_match "<mjml>", mailer
14
+ assert_match "<mj-body>", mailer
15
+ assert_match "<%= yield %>", mailer
16
+ end
17
+
18
+ assert_file "app/views/notifier_mailer/foo.html.erb" do |template|
19
+ assert_match "<%= @greeting %>", template
20
+ assert_match "app/views/notifier_mailer/foo.html.erb", template
21
+ end
22
+
23
+ assert_file "app/views/notifier_mailer/bar.html.erb"
24
+ assert_file "app/views/notifier_mailer/baz.html.erb"
15
25
  end
16
26
  end
@@ -1,127 +1,63 @@
1
1
  require "test_helper"
2
2
 
3
- class Notifier < ActionMailer::Base
3
+ class NotifierMailer < ActionMailer::Base
4
4
  self.view_paths = File.expand_path("../views", __FILE__)
5
5
 
6
- layout false
6
+ layout "default"
7
7
 
8
- def contact(recipient, format_type)
8
+ def inform_contact(recipient)
9
9
  @recipient = recipient
10
- mail(:to => @recipient, :from => "john.doe@example.com") do |format|
11
- format.send(format_type)
12
- end
13
- end
14
10
 
15
- def link(format_type)
16
- mail(:to => 'foo@bar.com', :from => "john.doe@example.com") do |format|
17
- format.send(format_type)
11
+ mail(to: @recipient, from: "app@example.com") do |format|
12
+ format.text
13
+ format.html
18
14
  end
19
15
  end
16
+ end
20
17
 
21
- def user(format_type)
22
- mail(:to => 'foo@bar.com', :from => "john.doe@example.com") do |format|
23
- format.send(format_type)
24
- end
25
- end
18
+ class NoLayoutMailer < ActionMailer::Base
19
+ self.view_paths = File.expand_path("../views", __FILE__)
26
20
 
27
- def no_partial(format_type)
28
- mail(:to => 'foo@bar.com', :from => "john.doe@example.com") do |format|
29
- format.send(format_type)
30
- end
31
- end
21
+ layout nil
32
22
 
33
- def multiple_format_contact(recipient)
23
+ def inform_contact(recipient)
34
24
  @recipient = recipient
35
- mail(:to => @recipient, :from => "john.doe@example.com", :template => "contact") do |format|
36
- format.text { render 'contact' }
37
- format.html { render 'contact' }
25
+
26
+ mail(to: @recipient, from: "app@example.com") do |format|
27
+ format.mjml
38
28
  end
39
29
  end
40
30
  end
41
31
 
42
- # class TestRenderer < ActionView::PartialRenderer
43
- # attr_accessor :show_text
44
- # def initialize(render_options = {})
45
- # @show_text = render_options.delete(:show_text)
46
- # super(render_options)
47
- # end
32
+ class NotifierMailerTest < ActiveSupport::TestCase
33
+ test "MJML layout based multipart email is generated correctly" do
34
+ email = NotifierMailer.inform_contact("user@example.com")
48
35
 
49
- # def normal_text(text)
50
- # show_text ? "TEST #{text}" : "TEST"
51
- # end
52
- # end
36
+ assert_equal "multipart/alternative", email.mime_type
53
37
 
54
- class MjmlTest < ActiveSupport::TestCase
55
-
56
- setup do
57
- @original_renderer = Mjml.renderer
58
- @original_processing_options = Mjml.processing_options
59
- end
38
+ refute email.html_part.body.match(%r{</?mj.+?>})
39
+ assert email.html_part.body.match(/<body>/)
40
+ assert email.html_part.body.match(/Hello, user@example.com!/)
41
+ assert email.html_part.body.match(%r{<h2>We inform you about something</h2>})
42
+ assert email.html_part.body.match(%r{<a href="https://www.example.com">this link</a>})
43
+ assert email.html_part.body.match(/tracking-code-123/)
60
44
 
61
- teardown do
62
- Mjml.renderer = @original_renderer
63
- Mjml.processing_options = @original_processing_options
45
+ assert email.text_part.body.match(/We inform you about something/)
46
+ assert email.text_part.body.match(%r{Please visit https://www.example.com})
64
47
  end
48
+ end
65
49
 
66
- test "html should be sent as html" do
67
- email = Notifier.contact("you@example.com", :mjml)
68
- assert_equal "text/html", email.mime_type
69
- assert_no_match(/<mj-body>/, email.body.encoded.strip)
70
- assert_match(/<body/, email.body.encoded.strip)
71
- assert_match('<p>Hello from <a href="http://www.sighmon.com">sighmon.com</a></p>', email.body.encoded.strip)
72
- end
50
+ class NotifierMailerTest < ActiveSupport::TestCase
51
+ test "old mjml-rails configuration style MJML template is rendered correctly" do
52
+ email = NoLayoutMailer.inform_contact("user@example.com")
73
53
 
74
- test 'with partial' do
75
- email = Notifier.user(:mjml)
76
54
  assert_equal "text/html", email.mime_type
77
- assert_match(/Hello Partial/, email.body.encoded.strip)
78
- assert_no_match(/mj-text/, email.body.encoded.strip)
79
- end
80
55
 
81
- test 'without a partial' do
82
- email = Notifier.no_partial(:mjml)
83
- assert_equal "text/html", email.mime_type
84
- assert_match(/Hello World/, email.body.encoded.strip)
85
- assert_no_match(/mj-text/, email.body.encoded.strip)
56
+ refute email.body.match(%r{</?mj.+?>})
57
+ assert email.body.match(/<body>/)
58
+ assert email.body.match(/Welcome, user@example.com!/)
59
+ assert email.body.match(%r{<h2>We inform you about something</h2>})
60
+ assert email.body.match(%r{<a href="https://www.example.com">this link</a>})
61
+ refute email.body.match(/tracking-code-123/)
86
62
  end
87
-
88
- # test "plain text should be sent as a plain text" do
89
- # email = Notifier.contact("you@example.com", :text)
90
- # assert_equal "text/plain", email.mime_type
91
- # assert_equal "<mj-body></mj-body>", email.body.encoded.strip
92
- # end
93
-
94
- # test 'dealing with multipart e-mails' do
95
- # email = Notifier.multiple_format_contact("you@example.com")
96
- # assert_equal 2, email.parts.size
97
- # assert_equal "multipart/alternative", email.mime_type
98
- # assert_equal "text/plain", email.parts[0].mime_type
99
- # assert_equal "<mj-body></mj-body>",
100
- # email.parts[0].body.encoded.strip
101
- # assert_equal "text/html", email.parts[1].mime_type
102
- # assert_not_equal "<mj-body></mj-body>",
103
- # email.parts[1].body.encoded.strip
104
- # end
105
-
106
- # test "with a custom renderer" do
107
- # Mjml.renderer = TestRenderer
108
- # email = Notifier.contact("you@example.com", :html)
109
- # assert_equal "text/html", email.mime_type
110
- # assert_equal "<p>TEST<strong>TEST</strong>TEST</p>", email.body.encoded.strip
111
- # end
112
-
113
- # test "with a custom renderer and options" do
114
- # Mjml.renderer = TestRenderer.new(:show_text => true)
115
- # email = Notifier.contact("you@example.com", :html)
116
- # assert_equal "text/html", email.mime_type
117
- # assert_equal "<p>TEST Dual templates <strong>TEST rocks</strong>TEST !</p>", email.body.encoded.strip
118
- # end
119
-
120
- # test 'with custom mjml processing options' do
121
- # Mjml.processing_options = {:autolink => true}
122
- # email = Notifier.link(:html)
123
- # assert_equal "text/html", email.mime_type
124
- # assert_equal '<p>Hello from <a href="http://www.sighmon.com">http://www.sighmon.com</a></p>', email.body.encoded.strip
125
- # end
126
-
127
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mjml-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Loffler
@@ -31,7 +31,7 @@ cert_chain:
31
31
  IUdCp7zF7QpeLz6cgerOpdG0NLHQOEPcWqHpt4yM++TieNrYOuJlkkSd11Ypvgsc
32
32
  RRE0kJj2aO7haTBQ7uQl3cTv2c1s4bLu
33
33
  -----END CERTIFICATE-----
34
- date: 2018-06-29 00:00:00.000000000 Z
34
+ date: 2018-07-08 00:00:00.000000000 Z
35
35
  dependencies: []
36
36
  description: Render MJML + ERb template views in Rails
37
37
  email: sighmon@sighmon.com
@@ -42,8 +42,8 @@ files:
42
42
  - MIT-LICENSE
43
43
  - README.md
44
44
  - lib/generators/mjml/mailer/mailer_generator.rb
45
- - lib/generators/mjml/mailer/templates/layout.mjml
46
- - lib/generators/mjml/mailer/templates/view.mjml
45
+ - lib/generators/mjml/mailer/templates/layout.html.mjml
46
+ - lib/generators/mjml/mailer/templates/view.html.erb
47
47
  - lib/mjml-rails.rb
48
48
  - lib/mjml.rb
49
49
  - lib/mjml/mjmltemplate.rb
@@ -51,7 +51,6 @@ files:
51
51
  - lib/mjml/railtie.rb
52
52
  - lib/mjml/version.rb
53
53
  - test/generator_test.rb
54
- - test/mjml_subdir_test.rb
55
54
  - test/mjml_test.rb
56
55
  - test/parser_test.rb
57
56
  - test/template_test.rb
@@ -82,7 +81,6 @@ specification_version: 4
82
81
  summary: MJML + ERb templates
83
82
  test_files:
84
83
  - test/generator_test.rb
85
- - test/mjml_subdir_test.rb
86
84
  - test/parser_test.rb
87
85
  - test/mjml_test.rb
88
86
  - test/template_test.rb
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- hð�I� dy��/;�y;w���^����h�����L.�Gt���r8�A �밍�7�漑�ל���i�r-Hh��� �@%��N�l�Tзw��VdL�UV�˶I��ʹtq��f#`p��p~Q��b��o�r^R���k�BM*`�ʂy{��1V%�:��3�Pu��#��r�� t��c�t� ���]t�Ԓ�d��[<)l<�R�B��=���V+D�-*�}F�f�0�����.�8�<�-��R�g�
1
+ L���8Z����s.���9W��tc1ʵ����a��5���D
2
+ ��m����)��1�{�y���$}�^+�2�&��ԉ`�uT�H��)q:>�Hm>jB��ŽŅ�^�y�wӽhp�p���2���F"� i��d����y"-&���}8vB�r�k�BK������9$[�\*���kf�x��8��B�-+q@��8��5����oz�R�8}J�;=�-#H�q{�<&lZᚄʙ�`,~�+
3
+ 6~��NR���5
@@ -1 +0,0 @@
1
- <%%= yield %>
@@ -1,76 +0,0 @@
1
- require "test_helper"
2
-
3
- class SubdirNotifier < ActionMailer::Base
4
- self.view_paths = File.expand_path("../views", __FILE__)
5
-
6
- layout false
7
-
8
- def simple_block(format_type)
9
- mail(:to => 'foo@bar.com', :from => "john.doe@example.com") do |format|
10
- format.send(format_type)
11
- end
12
- end
13
-
14
- def simple_block_and_path(format_type)
15
- mail(:template_path => 'template_subdir',:to => 'foo@bar.com', :from => "john.doe@example.com") do |format|
16
- format.send(format_type)
17
- end
18
- end
19
-
20
- def simple_with_path(format_type)
21
- mail(:template_path => 'template_subdir',:to => 'foo@bar.com', :from => "john.doe@example.com")
22
- end
23
-
24
- end
25
-
26
- # class TestRenderer < ActionView::PartialRenderer
27
- # attr_accessor :show_text
28
- # def initialize(render_options = {})
29
- # @show_text = render_options.delete(:show_text)
30
- # super(render_options)
31
- # end
32
-
33
- # def normal_text(text)
34
- # show_text ? "TEST #{text}" : "TEST"
35
- # end
36
- # end
37
-
38
- class MjmlTest < ActiveSupport::TestCase
39
-
40
- setup do
41
- @original_renderer = Mjml.renderer
42
- @original_processing_options = Mjml.processing_options
43
- end
44
-
45
- teardown do
46
- Mjml.renderer = @original_renderer
47
- Mjml.processing_options = @original_processing_options
48
- end
49
-
50
-
51
- test 'in a subdir with a block fails' do
52
- assert_raises(ActionView::MissingTemplate) do
53
- email = SubdirNotifier.simple_block(:mjml)
54
- assert_equal "text/html", email.mime_type
55
- assert_match(/alternate sub-directory/, email.body.encoded.strip)
56
- assert_no_match(/mj-text/, email.body.encoded.strip)
57
- end
58
- end
59
-
60
- test 'in a subdir with a block and template_path option fails' do
61
- assert_raises(ActionView::MissingTemplate) do
62
- email = SubdirNotifier.simple_block_and_path(:mjml)
63
- assert_equal "text/html", email.mime_type
64
- assert_match(/alternate sub-directory/, email.body.encoded.strip)
65
- assert_no_match(/mj-text/, email.body.encoded.strip)
66
- end
67
- end
68
-
69
- test 'in a subdir with path' do
70
- email = SubdirNotifier.simple_with_path(:mjml)
71
- assert_equal "text/html", email.mime_type
72
- assert_match(/alternate sub-directory/, email.body.encoded.strip)
73
- assert_no_match(/mj-text/, email.body.encoded.strip)
74
- end
75
-
76
- end