mjml-rails 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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