mail 2.6.5 → 2.7.0.rc1

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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +28 -1
  3. data/Dependencies.txt +0 -1
  4. data/Gemfile +5 -8
  5. data/MIT-LICENSE +1 -1
  6. data/README.md +5 -5
  7. data/Rakefile +0 -6
  8. data/lib/mail/attachments_list.rb +3 -2
  9. data/lib/mail/body.rb +3 -3
  10. data/lib/mail/check_delivery_params.rb +47 -10
  11. data/lib/mail/core_extensions/smtp.rb +19 -16
  12. data/lib/mail/core_extensions/string.rb +0 -4
  13. data/lib/mail/elements/address.rb +9 -4
  14. data/lib/mail/elements/address_list.rb +10 -18
  15. data/lib/mail/elements/content_disposition_element.rb +8 -15
  16. data/lib/mail/elements/content_location_element.rb +5 -10
  17. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  18. data/lib/mail/elements/content_type_element.rb +8 -19
  19. data/lib/mail/elements/date_time_element.rb +6 -14
  20. data/lib/mail/elements/envelope_from_element.rb +14 -21
  21. data/lib/mail/elements/message_ids_element.rb +8 -12
  22. data/lib/mail/elements/mime_version_element.rb +6 -14
  23. data/lib/mail/elements/phrase_list.rb +6 -9
  24. data/lib/mail/elements/received_element.rb +9 -15
  25. data/lib/mail/encodings.rb +12 -14
  26. data/lib/mail/field.rb +7 -4
  27. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  28. data/lib/mail/fields/content_type_field.rb +2 -7
  29. data/lib/mail/fields/unstructured_field.rb +2 -2
  30. data/lib/mail/header.rb +1 -0
  31. data/lib/mail/message.rb +23 -25
  32. data/lib/mail/multibyte/chars.rb +27 -27
  33. data/lib/mail/multibyte.rb +51 -0
  34. data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
  35. data/lib/mail/network/delivery_methods/sendmail.rb +2 -4
  36. data/lib/mail/network/delivery_methods/smtp.rb +16 -11
  37. data/lib/mail/network/delivery_methods/smtp_connection.rb +2 -6
  38. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
  39. data/lib/mail/parsers/address_lists_parser.rb +15321 -112
  40. data/lib/mail/parsers/address_lists_parser.rl +166 -0
  41. data/lib/mail/parsers/content_disposition_parser.rb +698 -55
  42. data/lib/mail/parsers/content_disposition_parser.rl +76 -0
  43. data/lib/mail/parsers/content_location_parser.rb +565 -23
  44. data/lib/mail/parsers/content_location_parser.rl +65 -0
  45. data/lib/mail/parsers/content_transfer_encoding_parser.rb +410 -22
  46. data/lib/mail/parsers/content_transfer_encoding_parser.rl +58 -0
  47. data/lib/mail/parsers/content_type_parser.rb +841 -54
  48. data/lib/mail/parsers/content_type_parser.rl +77 -0
  49. data/lib/mail/parsers/date_time_parser.rb +773 -26
  50. data/lib/mail/parsers/date_time_parser.rl +56 -0
  51. data/lib/mail/parsers/envelope_from_parser.rb +2051 -36
  52. data/lib/mail/parsers/envelope_from_parser.rl +76 -0
  53. data/lib/mail/parsers/message_ids_parser.rb +1494 -25
  54. data/lib/mail/parsers/message_ids_parser.rl +76 -0
  55. data/lib/mail/parsers/mime_version_parser.rb +393 -26
  56. data/lib/mail/parsers/mime_version_parser.rl +55 -0
  57. data/lib/mail/parsers/phrase_lists_parser.rb +529 -19
  58. data/lib/mail/parsers/phrase_lists_parser.rl +77 -0
  59. data/lib/mail/parsers/received_parser.rb +4711 -38
  60. data/lib/mail/parsers/received_parser.rl +78 -0
  61. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +12 -0
  62. data/lib/mail/parsers/rfc2045_content_type.rl +24 -0
  63. data/lib/mail/parsers/rfc2045_mime.rl +15 -0
  64. data/lib/mail/parsers/rfc2183_content_disposition.rl +14 -0
  65. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +16 -0
  66. data/lib/mail/parsers/rfc5322.rl +57 -0
  67. data/lib/mail/parsers/rfc5322_address.rl +70 -0
  68. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +7 -1
  69. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +56 -0
  70. data/lib/mail/parsers.rb +16 -24
  71. data/lib/mail/part.rb +1 -1
  72. data/lib/mail/parts_list.rb +5 -6
  73. data/lib/mail/utilities.rb +4 -2
  74. data/lib/mail/version.rb +3 -3
  75. data/lib/mail/version_specific/ruby_1_8.rb +28 -2
  76. data/lib/mail/version_specific/ruby_1_9.rb +48 -8
  77. data/lib/mail.rb +2 -10
  78. metadata +28 -45
  79. data/lib/mail/core_extensions/string/access.rb +0 -146
  80. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  81. data/lib/mail/parsers/ragel/common.rl +0 -185
  82. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  83. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  84. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  85. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  86. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  87. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  88. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  89. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  90. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  91. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  92. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  93. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  94. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  95. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  96. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  97. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  98. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  99. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  100. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  101. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  102. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  103. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  104. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  105. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  106. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  107. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  108. data/lib/mail/parsers/ragel.rb +0 -18
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+
4
+ %%{
5
+ machine content_type;
6
+
7
+ # Main Type
8
+ action main_type_s { main_type_s = p }
9
+ action main_type_e { content_type.main_type = data[main_type_s..(p-1)].downcase }
10
+
11
+ # Sub Type
12
+ action sub_type_s { sub_type_s = p }
13
+ action sub_type_e { content_type.sub_type = data[sub_type_s..(p-1)].downcase }
14
+
15
+ # Parameter Attribute
16
+ action param_attr_s { param_attr_s = p }
17
+ action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
18
+
19
+ # Quoted String
20
+ action qstr_s { qstr_s = p }
21
+ action qstr_e { qstr = data[qstr_s..(p-1)] }
22
+
23
+ # Parameter Value
24
+ action param_val_s { param_val_s = p }
25
+ action param_val_e {
26
+ if param_attr.nil?
27
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
28
+ end
29
+
30
+ # Use quoted s value if one exists, otherwise use parameter value
31
+ value = qstr || data[param_val_s..(p-1)]
32
+
33
+ content_type.parameters << { param_attr => value }
34
+ param_attr = nil
35
+ qstr = nil
36
+ }
37
+
38
+ # No-op actions
39
+ action comment_e { }
40
+ action comment_s { }
41
+ action phrase_e { }
42
+ action phrase_s { }
43
+
44
+ include rfc2045_content_type "rfc2045_content_type.rl";
45
+ main := content_type;
46
+ }%%
47
+
48
+ module Mail::Parsers
49
+ module ContentTypeParser
50
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
51
+
52
+ %%write data noprefix;
53
+
54
+ def self.parse(data)
55
+ return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
56
+ content_type = ContentTypeStruct.new(nil, nil, [])
57
+
58
+ # Parser state
59
+ main_type_s = sub_type_s = param_attr_s = param_attr = nil
60
+ qstr_s = qstr = param_val_s = nil
61
+
62
+ # 5.1 Variables Used by Ragel
63
+ p = 0
64
+ eof = pe = data.length
65
+ stack = []
66
+
67
+ %%write init;
68
+ %%write exec;
69
+
70
+ if p != eof || cs < %%{ write first_final; }%%
71
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
72
+ end
73
+
74
+ content_type
75
+ end
76
+ end
77
+ end