mail 2.6.5 → 2.7.1

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