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,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine content_disposition;
7
+ alphtype int;
6
8
 
7
9
  # Disposition Type
8
10
  action disp_type_s { disp_type_s = p }
9
- action disp_type_e { content_disposition.disposition_type = data[disp_type_s..(p-1)].downcase }
11
+ action disp_type_e { content_disposition.disposition_type = chars(data, disp_type_s, p-1).downcase }
10
12
 
11
13
  # Parameter Attribute
12
14
  action param_attr_s { param_attr_s = p }
13
- action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
15
+ action param_attr_e { param_attr = chars(data, param_attr_s, p-1) }
14
16
 
15
17
  # Quoted String
16
18
  action qstr_s { qstr_s = p }
17
- action qstr_e { qstr = data[qstr_s..(p-1)] }
19
+ action qstr_e { qstr = chars(data, qstr_s, p-1) }
18
20
 
19
21
  # Parameter Value
20
22
  action param_val_s { param_val_s = p }
@@ -24,7 +26,7 @@ require 'mail/utilities'
24
26
  end
25
27
 
26
28
  # Use quoted string value if one exists, otherwise use parameter value
27
- value = qstr || data[param_val_s..(p-1)]
29
+ value = qstr || chars(data, param_val_s, p-1)
28
30
 
29
31
  content_disposition.parameters << { param_attr => value }
30
32
  param_attr = nil
@@ -47,11 +49,15 @@ require 'mail/utilities'
47
49
 
48
50
  module Mail::Parsers
49
51
  module ContentDispositionParser
52
+ extend Mail::ParserTools
53
+
50
54
  ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :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
  content_disposition = ContentDispositionStruct.new('', [])
56
62
  return content_disposition 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::ContentDispositionElement, data, "Only able to parse up to #{data[0..p]}")
76
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentDispositionElement, data, p)
71
77
  end
72
78
 
73
79
  content_disposition