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,83 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+ require 'mail/parser_tools'
4
+
5
+ %%{
6
+ machine date_time;
7
+ alphtype int;
8
+
9
+ # Phrase
10
+ action phrase_s { phrase_s = p }
11
+ action phrase_e {
12
+ phrase_lists.phrases << chars(data, phrase_s, p-1) if phrase_s
13
+ phrase_s = nil
14
+ }
15
+
16
+ # No-op actions
17
+ action address_s {}
18
+ action address_e {}
19
+ action angle_addr_s {}
20
+ action ctime_date_s {}
21
+ action ctime_date_e {}
22
+ action comment_e {}
23
+ action comment_s {}
24
+ action domain_e {}
25
+ action domain_s {}
26
+ action local_dot_atom_e {}
27
+ action local_dot_atom_pre_comment_e {}
28
+ action local_dot_atom_pre_comment_s {}
29
+ action local_dot_atom_s {}
30
+ action qstr_e {}
31
+ action qstr_s {}
32
+ action date_s {}
33
+ action date_e {}
34
+ action time_s {}
35
+ action time_e {}
36
+ action local_quoted_string_s {}
37
+ action local_quoted_string_e {}
38
+ action obs_domain_list_s {}
39
+ action obs_domain_list_e {}
40
+ action group_name_s {}
41
+ action group_name_e {}
42
+ action msg_id_s {}
43
+ action msg_id_e {}
44
+ action received_tokens_s {}
45
+ action received_tokens_e {}
46
+
47
+ include rfc5322 "rfc5322.rl";
48
+ main := phrase_lists;
49
+ }%%
50
+
51
+ module Mail::Parsers
52
+ class PhraseListsParser
53
+ extend Mail::ParserTools
54
+
55
+ PhraseListsStruct = Struct.new(:phrases, :error)
56
+
57
+ %%write data noprefix;
58
+
59
+ def self.parse(data)
60
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
61
+
62
+ raise Mail::Field::NilParseError.new(Mail::PhraseList) if data.nil?
63
+
64
+ # Parser state
65
+ phrase_lists = PhraseListsStruct.new([])
66
+ phrase_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::PhraseListsElement, data, p)
78
+ end
79
+
80
+ phrase_lists
81
+ end
82
+ end
83
+ end