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,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine envelope_from;
7
+ alphtype int;
6
8
 
7
9
  # Address
8
10
  action address_s { address_s = p }
9
- action address_e { envelope_from.address = data[address_s..(p-1)].rstrip }
11
+ action address_e { envelope_from.address = chars(data, address_s, p-1).rstrip }
10
12
 
11
13
  # ctime_date
12
14
  action ctime_date_s { ctime_date_s = p }
13
- action ctime_date_e { envelope_from.ctime_date = data[ctime_date_s..(p-1)] }
15
+ action ctime_date_e { envelope_from.ctime_date = chars(data, ctime_date_s, p-1) }
14
16
 
15
17
  # No-op actions
16
18
  action angle_addr_s {}
@@ -47,11 +49,15 @@ require 'mail/utilities'
47
49
 
48
50
  module Mail::Parsers
49
51
  module EnvelopeFromParser
52
+ extend Mail::ParserTools
53
+
50
54
  EnvelopeFromStruct = Struct.new(:address, :ctime_date, :error)
51
55
 
52
56
  %%write data noprefix;
53
57
 
54
58
  def self.parse(data)
59
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
60
+
55
61
  envelope_from = EnvelopeFromStruct.new
56
62
  return envelope_from if Mail::Utilities.blank?(data)
57
63
 
@@ -67,7 +73,7 @@ module Mail::Parsers
67
73
  %%write exec;
68
74
 
69
75
  if p != eof || cs < %%{ write first_final; }%%
70
- raise Mail::Field::ParseError.new(Mail::EnvelopeFromElement, data, "Only able to parse up to #{data[0..p]}")
76
+ raise Mail::Field::IncompleteParseError.new(Mail::EnvelopeFromElement, data, p)
71
77
  end
72
78
 
73
79
  envelope_from