mail 2.6.4 → 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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -98
  3. data/lib/mail/attachments_list.rb +9 -5
  4. data/lib/mail/body.rb +42 -36
  5. data/lib/mail/check_delivery_params.rb +49 -10
  6. data/lib/mail/configuration.rb +2 -0
  7. data/lib/mail/core_extensions/smtp.rb +19 -16
  8. data/lib/mail/core_extensions/string.rb +0 -4
  9. data/lib/mail/elements/address.rb +37 -26
  10. data/lib/mail/elements/address_list.rb +10 -18
  11. data/lib/mail/elements/content_disposition_element.rb +8 -15
  12. data/lib/mail/elements/content_location_element.rb +5 -10
  13. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  14. data/lib/mail/elements/content_type_element.rb +8 -19
  15. data/lib/mail/elements/date_time_element.rb +6 -14
  16. data/lib/mail/elements/envelope_from_element.rb +14 -21
  17. data/lib/mail/elements/message_ids_element.rb +8 -12
  18. data/lib/mail/elements/mime_version_element.rb +6 -14
  19. data/lib/mail/elements/phrase_list.rb +6 -9
  20. data/lib/mail/elements/received_element.rb +9 -15
  21. data/lib/mail/encodings/7bit.rb +5 -15
  22. data/lib/mail/encodings/8bit.rb +2 -21
  23. data/lib/mail/encodings/base64.rb +11 -12
  24. data/lib/mail/encodings/binary.rb +3 -22
  25. data/lib/mail/encodings/identity.rb +24 -0
  26. data/lib/mail/encodings/quoted_printable.rb +6 -6
  27. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  28. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  29. data/lib/mail/encodings.rb +99 -43
  30. data/lib/mail/envelope.rb +1 -1
  31. data/lib/mail/field.rb +94 -59
  32. data/lib/mail/fields/bcc_field.rb +2 -2
  33. data/lib/mail/fields/cc_field.rb +1 -1
  34. data/lib/mail/fields/comments_field.rb +1 -1
  35. data/lib/mail/fields/common/address_container.rb +2 -2
  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 +31 -30
  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/retriever_methods/test_retriever.rb +1 -1
  83. data/lib/mail/network.rb +1 -0
  84. data/lib/mail/parser_tools.rb +15 -0
  85. data/lib/mail/parsers/address_lists_parser.rb +33186 -112
  86. data/lib/mail/parsers/address_lists_parser.rl +172 -0
  87. data/lib/mail/parsers/content_disposition_parser.rb +888 -55
  88. data/lib/mail/parsers/content_disposition_parser.rl +82 -0
  89. data/lib/mail/parsers/content_location_parser.rb +800 -23
  90. data/lib/mail/parsers/content_location_parser.rl +71 -0
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rb +510 -22
  92. data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
  93. data/lib/mail/parsers/content_type_parser.rb +1032 -54
  94. data/lib/mail/parsers/content_type_parser.rl +83 -0
  95. data/lib/mail/parsers/date_time_parser.rb +873 -26
  96. data/lib/mail/parsers/date_time_parser.rl +62 -0
  97. data/lib/mail/parsers/envelope_from_parser.rb +3564 -36
  98. data/lib/mail/parsers/envelope_from_parser.rl +82 -0
  99. data/lib/mail/parsers/message_ids_parser.rb +2843 -25
  100. data/lib/mail/parsers/message_ids_parser.rl +82 -0
  101. data/lib/mail/parsers/mime_version_parser.rb +493 -26
  102. data/lib/mail/parsers/mime_version_parser.rl +61 -0
  103. data/lib/mail/parsers/phrase_lists_parser.rb +874 -19
  104. data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
  105. data/lib/mail/parsers/received_parser.rb +8743 -38
  106. data/lib/mail/parsers/received_parser.rl +84 -0
  107. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  108. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  109. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  110. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  111. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  112. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  113. data/lib/mail/parsers/rfc5322.rl +59 -0
  114. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  115. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  116. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  117. data/lib/mail/parsers.rb +16 -24
  118. data/lib/mail/part.rb +1 -1
  119. data/lib/mail/parts_list.rb +5 -6
  120. data/lib/mail/utilities.rb +63 -18
  121. data/lib/mail/version.rb +2 -2
  122. data/lib/mail/version_specific/ruby_1_8.rb +40 -3
  123. data/lib/mail/version_specific/ruby_1_9.rb +64 -9
  124. data/lib/mail.rb +3 -16
  125. metadata +30 -53
  126. data/CHANGELOG.rdoc +0 -787
  127. data/CONTRIBUTING.md +0 -60
  128. data/Dependencies.txt +0 -2
  129. data/Gemfile +0 -11
  130. data/Rakefile +0 -29
  131. data/TODO.rdoc +0 -9
  132. data/lib/mail/core_extensions/string/access.rb +0 -146
  133. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  134. data/lib/mail/multibyte/exceptions.rb +0 -9
  135. data/lib/mail/parsers/ragel/common.rl +0 -185
  136. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  137. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  138. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  139. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  140. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  141. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  142. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  143. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  144. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  145. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  146. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  147. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  148. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  149. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  150. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  151. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  152. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  153. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  154. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  155. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  156. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  157. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  158. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  159. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  160. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  161. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  162. 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