mail 2.6.5 → 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 (161) hide show
  1. checksums.yaml +4 -4
  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 +42 -36
  6. data/lib/mail/check_delivery_params.rb +49 -10
  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/exim.rb +6 -10
  74. data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
  75. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  76. data/lib/mail/network/delivery_methods/sendmail.rb +16 -11
  77. data/lib/mail/network/delivery_methods/smtp.rb +59 -53
  78. data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -6
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
  80. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  81. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  82. data/lib/mail/network.rb +1 -0
  83. data/lib/mail/parser_tools.rb +15 -0
  84. data/lib/mail/parsers/address_lists_parser.rb +33186 -112
  85. data/lib/mail/parsers/address_lists_parser.rl +172 -0
  86. data/lib/mail/parsers/content_disposition_parser.rb +888 -55
  87. data/lib/mail/parsers/content_disposition_parser.rl +82 -0
  88. data/lib/mail/parsers/content_location_parser.rb +800 -23
  89. data/lib/mail/parsers/content_location_parser.rl +71 -0
  90. data/lib/mail/parsers/content_transfer_encoding_parser.rb +510 -22
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
  92. data/lib/mail/parsers/content_type_parser.rb +1032 -54
  93. data/lib/mail/parsers/content_type_parser.rl +83 -0
  94. data/lib/mail/parsers/date_time_parser.rb +873 -26
  95. data/lib/mail/parsers/date_time_parser.rl +62 -0
  96. data/lib/mail/parsers/envelope_from_parser.rb +3564 -36
  97. data/lib/mail/parsers/envelope_from_parser.rl +82 -0
  98. data/lib/mail/parsers/message_ids_parser.rb +2843 -25
  99. data/lib/mail/parsers/message_ids_parser.rl +82 -0
  100. data/lib/mail/parsers/mime_version_parser.rb +493 -26
  101. data/lib/mail/parsers/mime_version_parser.rl +61 -0
  102. data/lib/mail/parsers/phrase_lists_parser.rb +874 -19
  103. data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
  104. data/lib/mail/parsers/received_parser.rb +8743 -38
  105. data/lib/mail/parsers/received_parser.rl +84 -0
  106. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  107. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  108. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  109. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  110. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  111. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  112. data/lib/mail/parsers/rfc5322.rl +59 -0
  113. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  114. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  115. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  116. data/lib/mail/parsers.rb +16 -24
  117. data/lib/mail/part.rb +1 -1
  118. data/lib/mail/parts_list.rb +5 -6
  119. data/lib/mail/utilities.rb +48 -17
  120. data/lib/mail/version.rb +2 -2
  121. data/lib/mail/version_specific/ruby_1_8.rb +40 -3
  122. data/lib/mail/version_specific/ruby_1_9.rb +61 -9
  123. data/lib/mail.rb +3 -16
  124. metadata +30 -53
  125. data/CHANGELOG.rdoc +0 -795
  126. data/CONTRIBUTING.md +0 -60
  127. data/Dependencies.txt +0 -2
  128. data/Gemfile +0 -14
  129. data/Rakefile +0 -29
  130. data/TODO.rdoc +0 -9
  131. data/lib/mail/core_extensions/string/access.rb +0 -146
  132. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  133. data/lib/mail/multibyte/exceptions.rb +0 -9
  134. data/lib/mail/parsers/ragel/common.rl +0 -185
  135. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  136. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  137. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  138. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  139. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  140. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  141. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  142. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  143. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  144. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  145. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  146. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  147. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  148. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  149. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  150. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  151. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  152. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  153. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  154. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  155. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  156. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  157. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  158. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  159. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  160. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  161. 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