mail 2.7.0.rc1 → 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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -98
  3. data/lib/mail/attachments_list.rb +5 -2
  4. data/lib/mail/body.rb +39 -33
  5. data/lib/mail/check_delivery_params.rb +8 -6
  6. data/lib/mail/configuration.rb +2 -0
  7. data/lib/mail/elements/address.rb +19 -18
  8. data/lib/mail/encodings/7bit.rb +5 -15
  9. data/lib/mail/encodings/8bit.rb +2 -21
  10. data/lib/mail/encodings/base64.rb +11 -12
  11. data/lib/mail/encodings/binary.rb +3 -22
  12. data/lib/mail/encodings/identity.rb +24 -0
  13. data/lib/mail/encodings/quoted_printable.rb +6 -6
  14. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  15. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  16. data/lib/mail/encodings.rb +89 -31
  17. data/lib/mail/envelope.rb +1 -1
  18. data/lib/mail/field.rb +93 -61
  19. data/lib/mail/fields/bcc_field.rb +2 -2
  20. data/lib/mail/fields/cc_field.rb +1 -1
  21. data/lib/mail/fields/comments_field.rb +1 -1
  22. data/lib/mail/fields/common/common_address.rb +32 -7
  23. data/lib/mail/fields/common/common_field.rb +1 -10
  24. data/lib/mail/fields/content_description_field.rb +1 -1
  25. data/lib/mail/fields/content_disposition_field.rb +3 -3
  26. data/lib/mail/fields/content_id_field.rb +2 -2
  27. data/lib/mail/fields/content_location_field.rb +1 -1
  28. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  29. data/lib/mail/fields/content_type_field.rb +1 -1
  30. data/lib/mail/fields/date_field.rb +2 -3
  31. data/lib/mail/fields/from_field.rb +1 -1
  32. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  33. data/lib/mail/fields/keywords_field.rb +1 -1
  34. data/lib/mail/fields/message_id_field.rb +1 -1
  35. data/lib/mail/fields/mime_version_field.rb +1 -1
  36. data/lib/mail/fields/optional_field.rb +4 -1
  37. data/lib/mail/fields/received_field.rb +1 -1
  38. data/lib/mail/fields/references_field.rb +1 -1
  39. data/lib/mail/fields/reply_to_field.rb +1 -1
  40. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  41. data/lib/mail/fields/resent_cc_field.rb +1 -1
  42. data/lib/mail/fields/resent_date_field.rb +0 -1
  43. data/lib/mail/fields/resent_from_field.rb +1 -1
  44. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  45. data/lib/mail/fields/resent_sender_field.rb +1 -1
  46. data/lib/mail/fields/resent_to_field.rb +1 -1
  47. data/lib/mail/fields/return_path_field.rb +1 -1
  48. data/lib/mail/fields/sender_field.rb +1 -1
  49. data/lib/mail/fields/subject_field.rb +1 -1
  50. data/lib/mail/fields/to_field.rb +1 -1
  51. data/lib/mail/fields/unstructured_field.rb +19 -2
  52. data/lib/mail/header.rb +9 -8
  53. data/lib/mail/mail.rb +2 -10
  54. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  55. data/lib/mail/message.rb +63 -50
  56. data/lib/mail/multibyte/chars.rb +2 -1
  57. data/lib/mail/multibyte.rb +14 -16
  58. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  59. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  60. data/lib/mail/network/delivery_methods/sendmail.rb +14 -7
  61. data/lib/mail/network/delivery_methods/smtp.rb +56 -55
  62. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
  63. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  64. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  65. data/lib/mail/network.rb +1 -0
  66. data/lib/mail/parser_tools.rb +15 -0
  67. data/lib/mail/parsers/address_lists_parser.rb +30462 -12597
  68. data/lib/mail/parsers/address_lists_parser.rl +18 -12
  69. data/lib/mail/parsers/content_disposition_parser.rb +405 -215
  70. data/lib/mail/parsers/content_disposition_parser.rl +11 -5
  71. data/lib/mail/parsers/content_location_parser.rb +443 -208
  72. data/lib/mail/parsers/content_location_parser.rl +9 -3
  73. data/lib/mail/parsers/content_transfer_encoding_parser.rb +180 -80
  74. data/lib/mail/parsers/content_transfer_encoding_parser.rl +8 -2
  75. data/lib/mail/parsers/content_type_parser.rb +436 -245
  76. data/lib/mail/parsers/content_type_parser.rl +12 -6
  77. data/lib/mail/parsers/date_time_parser.rb +172 -72
  78. data/lib/mail/parsers/date_time_parser.rl +10 -4
  79. data/lib/mail/parsers/envelope_from_parser.rb +2833 -1320
  80. data/lib/mail/parsers/envelope_from_parser.rl +9 -3
  81. data/lib/mail/parsers/message_ids_parser.rb +2325 -976
  82. data/lib/mail/parsers/message_ids_parser.rl +9 -3
  83. data/lib/mail/parsers/mime_version_parser.rb +164 -64
  84. data/lib/mail/parsers/mime_version_parser.rl +9 -3
  85. data/lib/mail/parsers/phrase_lists_parser.rb +582 -237
  86. data/lib/mail/parsers/phrase_lists_parser.rl +9 -3
  87. data/lib/mail/parsers/received_parser.rb +7036 -3004
  88. data/lib/mail/parsers/received_parser.rl +11 -5
  89. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +1 -0
  90. data/lib/mail/parsers/rfc2045_content_type.rl +1 -0
  91. data/lib/mail/parsers/rfc2045_mime.rl +1 -0
  92. data/lib/mail/parsers/rfc2183_content_disposition.rl +1 -0
  93. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  94. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +7 -1
  95. data/lib/mail/parsers/rfc5322.rl +3 -1
  96. data/lib/mail/parsers/rfc5322_address.rl +3 -1
  97. data/lib/mail/parsers/rfc5322_date_time.rl +1 -0
  98. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +9 -5
  99. data/lib/mail/part.rb +1 -1
  100. data/lib/mail/utilities.rb +44 -15
  101. data/lib/mail/version.rb +1 -1
  102. data/lib/mail/version_specific/ruby_1_8.rb +12 -1
  103. data/lib/mail/version_specific/ruby_1_9.rb +13 -1
  104. data/lib/mail.rb +1 -6
  105. metadata +9 -15
  106. data/CHANGELOG.rdoc +0 -822
  107. data/CONTRIBUTING.md +0 -60
  108. data/Dependencies.txt +0 -1
  109. data/Gemfile +0 -11
  110. data/Rakefile +0 -23
  111. data/TODO.rdoc +0 -9
  112. data/lib/mail/multibyte/exceptions.rb +0 -9
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine date_time;
7
+ alphtype int;
6
8
 
7
9
  # Phrase
8
10
  action phrase_s { phrase_s = p }
9
11
  action phrase_e {
10
- phrase_lists.phrases << data[phrase_s..(p-1)] if phrase_s
12
+ phrase_lists.phrases << chars(data, phrase_s, p-1) if phrase_s
11
13
  phrase_s = nil
12
14
  }
13
15
 
@@ -48,12 +50,16 @@ require 'mail/utilities'
48
50
 
49
51
  module Mail::Parsers
50
52
  class PhraseListsParser
53
+ extend Mail::ParserTools
54
+
51
55
  PhraseListsStruct = Struct.new(:phrases, :error)
52
56
 
53
57
  %%write data noprefix;
54
58
 
55
59
  def self.parse(data)
56
- raise Mail::Field::ParseError.new(Mail::PhraseList, data, 'nil is invalid') if data.nil?
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?
57
63
 
58
64
  # Parser state
59
65
  phrase_lists = PhraseListsStruct.new([])
@@ -68,7 +74,7 @@ module Mail::Parsers
68
74
  %%write exec;
69
75
 
70
76
  if p != eof || cs < %%{ write first_final; }%%
71
- raise Mail::Field::ParseError.new(Mail::PhraseListsElement, data, "Only able to parse up to #{data[0..p]}")
77
+ raise Mail::Field::IncompleteParseError.new(Mail::PhraseListsElement, data, p)
72
78
  end
73
79
 
74
80
  phrase_lists