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,82 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+ require 'mail/parser_tools'
4
+
5
+ %%{
6
+ machine envelope_from;
7
+ alphtype int;
8
+
9
+ # Address
10
+ action address_s { address_s = p }
11
+ action address_e { envelope_from.address = chars(data, address_s, p-1).rstrip }
12
+
13
+ # ctime_date
14
+ action ctime_date_s { ctime_date_s = p }
15
+ action ctime_date_e { envelope_from.ctime_date = chars(data, ctime_date_s, p-1) }
16
+
17
+ # No-op actions
18
+ action angle_addr_s {}
19
+ action comment_e {}
20
+ action comment_s {}
21
+ action domain_e {}
22
+ action domain_s {}
23
+ action local_dot_atom_e {}
24
+ action local_dot_atom_pre_comment_e {}
25
+ action local_dot_atom_pre_comment_s {}
26
+ action local_dot_atom_s {}
27
+ action phrase_s {}
28
+ action phrase_e {}
29
+ action qstr_e {}
30
+ action qstr_s {}
31
+ action date_s {}
32
+ action date_e {}
33
+ action time_s {}
34
+ action time_e {}
35
+ action local_quoted_string_s {}
36
+ action local_quoted_string_e {}
37
+ action obs_domain_list_s {}
38
+ action obs_domain_list_e {}
39
+ action group_name_s {}
40
+ action group_name_e {}
41
+ action msg_id_s {}
42
+ action msg_id_e {}
43
+ action received_tokens_s {}
44
+ action received_tokens_e {}
45
+
46
+ include rfc5322 "rfc5322.rl";
47
+ main := envelope_from;
48
+ }%%
49
+
50
+ module Mail::Parsers
51
+ module EnvelopeFromParser
52
+ extend Mail::ParserTools
53
+
54
+ EnvelopeFromStruct = Struct.new(:address, :ctime_date, :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
+ envelope_from = EnvelopeFromStruct.new
62
+ return envelope_from if Mail::Utilities.blank?(data)
63
+
64
+ # Parser state
65
+ address_s = ctime_date_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::EnvelopeFromElement, data, p)
77
+ end
78
+
79
+ envelope_from
80
+ end
81
+ end
82
+ end