mail 2.6.6 → 2.7.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +74 -90
  4. data/lib/mail/attachments_list.rb +8 -4
  5. data/lib/mail/body.rb +42 -36
  6. data/lib/mail/check_delivery_params.rb +8 -6
  7. data/lib/mail/configuration.rb +2 -0
  8. data/lib/mail/core_extensions/smtp.rb +19 -16
  9. data/lib/mail/core_extensions/string.rb +0 -4
  10. data/lib/mail/elements/address.rb +28 -22
  11. data/lib/mail/elements/address_list.rb +10 -18
  12. data/lib/mail/elements/content_disposition_element.rb +8 -15
  13. data/lib/mail/elements/content_location_element.rb +5 -10
  14. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  15. data/lib/mail/elements/content_type_element.rb +8 -19
  16. data/lib/mail/elements/date_time_element.rb +6 -14
  17. data/lib/mail/elements/envelope_from_element.rb +14 -21
  18. data/lib/mail/elements/message_ids_element.rb +8 -12
  19. data/lib/mail/elements/mime_version_element.rb +6 -14
  20. data/lib/mail/elements/phrase_list.rb +6 -9
  21. data/lib/mail/elements/received_element.rb +9 -15
  22. data/lib/mail/encodings/7bit.rb +5 -15
  23. data/lib/mail/encodings/8bit.rb +2 -21
  24. data/lib/mail/encodings/base64.rb +11 -12
  25. data/lib/mail/encodings/binary.rb +3 -22
  26. data/lib/mail/encodings/identity.rb +24 -0
  27. data/lib/mail/encodings/quoted_printable.rb +6 -6
  28. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  29. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  30. data/lib/mail/encodings.rb +99 -43
  31. data/lib/mail/envelope.rb +1 -1
  32. data/lib/mail/field.rb +94 -59
  33. data/lib/mail/fields/bcc_field.rb +2 -2
  34. data/lib/mail/fields/cc_field.rb +1 -1
  35. data/lib/mail/fields/comments_field.rb +1 -1
  36. data/lib/mail/fields/common/common_address.rb +32 -7
  37. data/lib/mail/fields/common/common_field.rb +1 -10
  38. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  39. data/lib/mail/fields/content_description_field.rb +1 -1
  40. data/lib/mail/fields/content_disposition_field.rb +3 -3
  41. data/lib/mail/fields/content_id_field.rb +2 -2
  42. data/lib/mail/fields/content_location_field.rb +1 -1
  43. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  44. data/lib/mail/fields/content_type_field.rb +3 -8
  45. data/lib/mail/fields/date_field.rb +2 -3
  46. data/lib/mail/fields/from_field.rb +1 -1
  47. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  48. data/lib/mail/fields/keywords_field.rb +1 -1
  49. data/lib/mail/fields/message_id_field.rb +1 -1
  50. data/lib/mail/fields/mime_version_field.rb +1 -1
  51. data/lib/mail/fields/optional_field.rb +4 -1
  52. data/lib/mail/fields/received_field.rb +1 -1
  53. data/lib/mail/fields/references_field.rb +1 -1
  54. data/lib/mail/fields/reply_to_field.rb +1 -1
  55. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  56. data/lib/mail/fields/resent_cc_field.rb +1 -1
  57. data/lib/mail/fields/resent_date_field.rb +0 -1
  58. data/lib/mail/fields/resent_from_field.rb +1 -1
  59. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  60. data/lib/mail/fields/resent_sender_field.rb +1 -1
  61. data/lib/mail/fields/resent_to_field.rb +1 -1
  62. data/lib/mail/fields/return_path_field.rb +1 -1
  63. data/lib/mail/fields/sender_field.rb +1 -1
  64. data/lib/mail/fields/subject_field.rb +1 -1
  65. data/lib/mail/fields/to_field.rb +1 -1
  66. data/lib/mail/fields/unstructured_field.rb +21 -4
  67. data/lib/mail/header.rb +10 -8
  68. data/lib/mail/mail.rb +2 -10
  69. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  70. data/lib/mail/message.rb +77 -66
  71. data/lib/mail/multibyte/chars.rb +29 -28
  72. data/lib/mail/multibyte.rb +64 -15
  73. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  74. data/lib/mail/network/delivery_methods/sendmail.rb +8 -5
  75. data/lib/mail/network/delivery_methods/smtp.rb +58 -49
  76. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
  77. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  78. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  79. data/lib/mail/network.rb +1 -0
  80. data/lib/mail/parser_tools.rb +15 -0
  81. data/lib/mail/parsers/address_lists_parser.rb +33186 -112
  82. data/lib/mail/parsers/address_lists_parser.rl +172 -0
  83. data/lib/mail/parsers/content_disposition_parser.rb +888 -55
  84. data/lib/mail/parsers/content_disposition_parser.rl +82 -0
  85. data/lib/mail/parsers/content_location_parser.rb +800 -23
  86. data/lib/mail/parsers/content_location_parser.rl +71 -0
  87. data/lib/mail/parsers/content_transfer_encoding_parser.rb +510 -22
  88. data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
  89. data/lib/mail/parsers/content_type_parser.rb +1032 -54
  90. data/lib/mail/parsers/content_type_parser.rl +83 -0
  91. data/lib/mail/parsers/date_time_parser.rb +873 -26
  92. data/lib/mail/parsers/date_time_parser.rl +62 -0
  93. data/lib/mail/parsers/envelope_from_parser.rb +3564 -36
  94. data/lib/mail/parsers/envelope_from_parser.rl +82 -0
  95. data/lib/mail/parsers/message_ids_parser.rb +2843 -25
  96. data/lib/mail/parsers/message_ids_parser.rl +82 -0
  97. data/lib/mail/parsers/mime_version_parser.rb +493 -26
  98. data/lib/mail/parsers/mime_version_parser.rl +61 -0
  99. data/lib/mail/parsers/phrase_lists_parser.rb +874 -19
  100. data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
  101. data/lib/mail/parsers/received_parser.rb +8743 -38
  102. data/lib/mail/parsers/received_parser.rl +84 -0
  103. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  104. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  105. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  106. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  107. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  108. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  109. data/lib/mail/parsers/rfc5322.rl +59 -0
  110. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  111. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  112. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  113. data/lib/mail/parsers.rb +16 -24
  114. data/lib/mail/part.rb +1 -1
  115. data/lib/mail/parts_list.rb +5 -6
  116. data/lib/mail/utilities.rb +48 -17
  117. data/lib/mail/version.rb +2 -2
  118. data/lib/mail/version_specific/ruby_1_8.rb +40 -3
  119. data/lib/mail/version_specific/ruby_1_9.rb +61 -9
  120. data/lib/mail.rb +3 -16
  121. metadata +29 -52
  122. data/CHANGELOG.rdoc +0 -803
  123. data/CONTRIBUTING.md +0 -60
  124. data/Dependencies.txt +0 -2
  125. data/Gemfile +0 -14
  126. data/Rakefile +0 -29
  127. data/TODO.rdoc +0 -9
  128. data/lib/mail/core_extensions/string/access.rb +0 -146
  129. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  130. data/lib/mail/multibyte/exceptions.rb +0 -9
  131. data/lib/mail/parsers/ragel/common.rl +0 -185
  132. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  133. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  134. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  135. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  136. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  137. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  138. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  139. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  140. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  141. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  142. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  143. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  144. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  145. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  146. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  147. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  148. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  149. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  150. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  151. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  152. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  153. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  154. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  155. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  156. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  157. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  158. data/lib/mail/parsers/ragel.rb +0 -18
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+ require 'mail/parser_tools'
4
+
5
+ %%{
6
+ machine content_type;
7
+ alphtype int;
8
+
9
+ # Main Type
10
+ action main_type_s { main_type_s = p }
11
+ action main_type_e { content_type.main_type = chars(data, main_type_s, p-1).downcase }
12
+
13
+ # Sub Type
14
+ action sub_type_s { sub_type_s = p }
15
+ action sub_type_e { content_type.sub_type = chars(data, sub_type_s, p-1).downcase }
16
+
17
+ # Parameter Attribute
18
+ action param_attr_s { param_attr_s = p }
19
+ action param_attr_e { param_attr = chars(data, param_attr_s, p-1) }
20
+
21
+ # Quoted String
22
+ action qstr_s { qstr_s = p }
23
+ action qstr_e { qstr = chars(data, qstr_s, p-1) }
24
+
25
+ # Parameter Value
26
+ action param_val_s { param_val_s = p }
27
+ action param_val_e {
28
+ if param_attr.nil?
29
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
30
+ end
31
+
32
+ # Use quoted s value if one exists, otherwise use parameter value
33
+ value = qstr || chars(data, param_val_s, p-1)
34
+
35
+ content_type.parameters << { param_attr => value }
36
+ param_attr = nil
37
+ qstr = nil
38
+ }
39
+
40
+ # No-op actions
41
+ action comment_e { }
42
+ action comment_s { }
43
+ action phrase_e { }
44
+ action phrase_s { }
45
+
46
+ include rfc2045_content_type "rfc2045_content_type.rl";
47
+ main := content_type;
48
+ }%%
49
+
50
+ module Mail::Parsers
51
+ module ContentTypeParser
52
+ extend Mail::ParserTools
53
+
54
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
55
+
56
+ %%write data noprefix;
57
+
58
+ def self.parse(data)
59
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
60
+
61
+ return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
62
+ content_type = ContentTypeStruct.new(nil, nil, [])
63
+
64
+ # Parser state
65
+ main_type_s = sub_type_s = param_attr_s = param_attr = nil
66
+ qstr_s = qstr = param_val_s = nil
67
+
68
+ # 5.1 Variables Used by Ragel
69
+ p = 0
70
+ eof = pe = data.length
71
+ stack = []
72
+
73
+ %%write init;
74
+ %%write exec;
75
+
76
+ if p != eof || cs < %%{ write first_final; }%%
77
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
78
+ end
79
+
80
+ content_type
81
+ end
82
+ end
83
+ end