mail 2.7.0.rc1 → 2.7.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -98
  3. data/lib/mail.rb +1 -6
  4. data/lib/mail/attachments_list.rb +5 -2
  5. data/lib/mail/body.rb +39 -33
  6. data/lib/mail/check_delivery_params.rb +8 -6
  7. data/lib/mail/configuration.rb +2 -0
  8. data/lib/mail/elements/address.rb +19 -18
  9. data/lib/mail/encodings.rb +89 -31
  10. data/lib/mail/encodings/7bit.rb +5 -15
  11. data/lib/mail/encodings/8bit.rb +2 -21
  12. data/lib/mail/encodings/base64.rb +11 -12
  13. data/lib/mail/encodings/binary.rb +3 -22
  14. data/lib/mail/encodings/identity.rb +24 -0
  15. data/lib/mail/encodings/quoted_printable.rb +6 -6
  16. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  17. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  18. data/lib/mail/envelope.rb +1 -1
  19. data/lib/mail/field.rb +93 -61
  20. data/lib/mail/fields/bcc_field.rb +2 -2
  21. data/lib/mail/fields/cc_field.rb +1 -1
  22. data/lib/mail/fields/comments_field.rb +1 -1
  23. data/lib/mail/fields/common/common_address.rb +32 -7
  24. data/lib/mail/fields/common/common_field.rb +1 -10
  25. data/lib/mail/fields/content_description_field.rb +1 -1
  26. data/lib/mail/fields/content_disposition_field.rb +3 -3
  27. data/lib/mail/fields/content_id_field.rb +2 -2
  28. data/lib/mail/fields/content_location_field.rb +1 -1
  29. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  30. data/lib/mail/fields/content_type_field.rb +1 -1
  31. data/lib/mail/fields/date_field.rb +2 -3
  32. data/lib/mail/fields/from_field.rb +1 -1
  33. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  34. data/lib/mail/fields/keywords_field.rb +1 -1
  35. data/lib/mail/fields/message_id_field.rb +1 -1
  36. data/lib/mail/fields/mime_version_field.rb +1 -1
  37. data/lib/mail/fields/optional_field.rb +4 -1
  38. data/lib/mail/fields/received_field.rb +1 -1
  39. data/lib/mail/fields/references_field.rb +1 -1
  40. data/lib/mail/fields/reply_to_field.rb +1 -1
  41. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  42. data/lib/mail/fields/resent_cc_field.rb +1 -1
  43. data/lib/mail/fields/resent_date_field.rb +0 -1
  44. data/lib/mail/fields/resent_from_field.rb +1 -1
  45. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  46. data/lib/mail/fields/resent_sender_field.rb +1 -1
  47. data/lib/mail/fields/resent_to_field.rb +1 -1
  48. data/lib/mail/fields/return_path_field.rb +1 -1
  49. data/lib/mail/fields/sender_field.rb +1 -1
  50. data/lib/mail/fields/subject_field.rb +1 -1
  51. data/lib/mail/fields/to_field.rb +1 -1
  52. data/lib/mail/fields/unstructured_field.rb +19 -2
  53. data/lib/mail/header.rb +9 -8
  54. data/lib/mail/mail.rb +2 -10
  55. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  56. data/lib/mail/message.rb +64 -51
  57. data/lib/mail/multibyte.rb +14 -16
  58. data/lib/mail/multibyte/chars.rb +2 -1
  59. data/lib/mail/network.rb +1 -0
  60. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  61. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  62. data/lib/mail/network/delivery_methods/sendmail.rb +8 -4
  63. data/lib/mail/network/delivery_methods/smtp.rb +56 -55
  64. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
  65. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  66. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  67. data/lib/mail/parser_tools.rb +15 -0
  68. data/lib/mail/parsers/address_lists_parser.rb +30462 -12597
  69. data/lib/mail/parsers/address_lists_parser.rl +18 -12
  70. data/lib/mail/parsers/content_disposition_parser.rb +405 -215
  71. data/lib/mail/parsers/content_disposition_parser.rl +11 -5
  72. data/lib/mail/parsers/content_location_parser.rb +443 -208
  73. data/lib/mail/parsers/content_location_parser.rl +9 -3
  74. data/lib/mail/parsers/content_transfer_encoding_parser.rb +180 -80
  75. data/lib/mail/parsers/content_transfer_encoding_parser.rl +8 -2
  76. data/lib/mail/parsers/content_type_parser.rb +436 -245
  77. data/lib/mail/parsers/content_type_parser.rl +12 -6
  78. data/lib/mail/parsers/date_time_parser.rb +172 -72
  79. data/lib/mail/parsers/date_time_parser.rl +10 -4
  80. data/lib/mail/parsers/envelope_from_parser.rb +2833 -1320
  81. data/lib/mail/parsers/envelope_from_parser.rl +9 -3
  82. data/lib/mail/parsers/message_ids_parser.rb +2325 -976
  83. data/lib/mail/parsers/message_ids_parser.rl +9 -3
  84. data/lib/mail/parsers/mime_version_parser.rb +164 -64
  85. data/lib/mail/parsers/mime_version_parser.rl +9 -3
  86. data/lib/mail/parsers/phrase_lists_parser.rb +582 -237
  87. data/lib/mail/parsers/phrase_lists_parser.rl +9 -3
  88. data/lib/mail/parsers/received_parser.rb +7036 -3004
  89. data/lib/mail/parsers/received_parser.rl +11 -5
  90. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +1 -0
  91. data/lib/mail/parsers/rfc2045_content_type.rl +1 -0
  92. data/lib/mail/parsers/rfc2045_mime.rl +1 -0
  93. data/lib/mail/parsers/rfc2183_content_disposition.rl +1 -0
  94. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  95. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +7 -1
  96. data/lib/mail/parsers/rfc5322.rl +3 -1
  97. data/lib/mail/parsers/rfc5322_address.rl +3 -1
  98. data/lib/mail/parsers/rfc5322_date_time.rl +1 -0
  99. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +9 -5
  100. data/lib/mail/part.rb +1 -1
  101. data/lib/mail/utilities.rb +44 -15
  102. data/lib/mail/version.rb +1 -1
  103. data/lib/mail/version_specific/ruby_1_8.rb +12 -1
  104. data/lib/mail/version_specific/ruby_1_9.rb +13 -1
  105. metadata +7 -13
  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,24 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine content_type;
7
+ alphtype int;
6
8
 
7
9
  # Main Type
8
10
  action main_type_s { main_type_s = p }
9
- action main_type_e { content_type.main_type = data[main_type_s..(p-1)].downcase }
11
+ action main_type_e { content_type.main_type = chars(data, main_type_s, p-1).downcase }
10
12
 
11
13
  # Sub Type
12
14
  action sub_type_s { sub_type_s = p }
13
- action sub_type_e { content_type.sub_type = data[sub_type_s..(p-1)].downcase }
15
+ action sub_type_e { content_type.sub_type = chars(data, sub_type_s, p-1).downcase }
14
16
 
15
17
  # Parameter Attribute
16
18
  action param_attr_s { param_attr_s = p }
17
- action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
19
+ action param_attr_e { param_attr = chars(data, param_attr_s, p-1) }
18
20
 
19
21
  # Quoted String
20
22
  action qstr_s { qstr_s = p }
21
- action qstr_e { qstr = data[qstr_s..(p-1)] }
23
+ action qstr_e { qstr = chars(data, qstr_s, p-1) }
22
24
 
23
25
  # Parameter Value
24
26
  action param_val_s { param_val_s = p }
@@ -28,7 +30,7 @@ require 'mail/utilities'
28
30
  end
29
31
 
30
32
  # Use quoted s value if one exists, otherwise use parameter value
31
- value = qstr || data[param_val_s..(p-1)]
33
+ value = qstr || chars(data, param_val_s, p-1)
32
34
 
33
35
  content_type.parameters << { param_attr => value }
34
36
  param_attr = nil
@@ -47,11 +49,15 @@ require 'mail/utilities'
47
49
 
48
50
  module Mail::Parsers
49
51
  module ContentTypeParser
52
+ extend Mail::ParserTools
53
+
50
54
  ContentTypeStruct = Struct.new(:main_type, :sub_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
  return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
56
62
  content_type = ContentTypeStruct.new(nil, nil, [])
57
63
 
@@ -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::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
77
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
72
78
  end
73
79
 
74
80
  content_type
@@ -1,12 +1,15 @@
1
1
 
2
2
  # frozen_string_literal: true
3
3
  require 'mail/utilities'
4
+ require 'mail/parser_tools'
4
5
 
5
6
 
6
7
 
7
8
 
8
9
  module Mail::Parsers
9
10
  module DateTimeParser
11
+ extend Mail::ParserTools
12
+
10
13
  DateTimeStruct = Struct.new(:date_string, :time_string, :error)
11
14
 
12
15
 
@@ -49,11 +52,14 @@ self._trans_keys = [
49
52
  110, 110, 97, 117, 116,
50
53
  116, 104, 117, 117, 117,
51
54
  101, 101, 101, 101, 100, 100,
52
- 1, 127, 1, 127, 10,
53
- 10, 9, 32, -128, -1,
54
- 9, 40, 9, 40, 9, 40,
55
- 9, 83, 9, 77, 9,
56
- 84, 0, 0, 0
55
+ 1, 244, 1, 244, 10,
56
+ 10, 9, 32, 0, 244,
57
+ 128, 191, 160, 191, 128, 191,
58
+ 128, 159, 144, 191, 128,
59
+ 191, 128, 143, 9, 40,
60
+ 9, 40, 9, 40, 9, 83,
61
+ 9, 77, 9, 84, 0,
62
+ 0, 0
57
63
  ]
58
64
 
59
65
  class << self
@@ -72,8 +78,9 @@ self._key_spans = [
72
78
  8, 1, 1, 1, 1, 1, 1, 1,
73
79
  1, 36, 1, 24, 36, 49, 49, 1,
74
80
  24, 49, 1, 1, 21, 1, 14, 1,
75
- 1, 1, 1, 127, 127, 1, 24, 128,
76
- 32, 32, 32, 75, 69, 76, 0
81
+ 1, 1, 1, 244, 244, 1, 24, 245,
82
+ 64, 32, 64, 32, 48, 64, 16, 32,
83
+ 32, 32, 75, 69, 76, 0
77
84
  ]
78
85
 
79
86
  class << self
@@ -92,8 +99,9 @@ self._index_offsets = [
92
99
  1827, 1836, 1838, 1840, 1842, 1844, 1846, 1848,
93
100
  1850, 1852, 1889, 1891, 1916, 1953, 2003, 2053,
94
101
  2055, 2080, 2130, 2132, 2134, 2156, 2158, 2173,
95
- 2175, 2177, 2179, 2181, 2309, 2437, 2439, 2464,
96
- 2593, 2626, 2659, 2692, 2768, 2838, 2915
102
+ 2175, 2177, 2179, 2181, 2426, 2671, 2673, 2698,
103
+ 2944, 3009, 3042, 3107, 3140, 3189, 3254, 3271,
104
+ 3304, 3337, 3370, 3446, 3516, 3593
97
105
  ]
98
106
 
99
107
  class << self
@@ -389,31 +397,7 @@ self._indicies = [
389
397
  152, 152, 152, 152, 152, 152, 152, 152,
390
398
  152, 152, 152, 152, 152, 152, 152, 152,
391
399
  152, 152, 152, 152, 152, 152, 152, 152,
392
- 152, 152, 152, 152, 1, 157, 157, 157,
393
- 157, 157, 157, 157, 157, 157, 1, 157,
394
- 157, 158, 157, 157, 157, 157, 157, 157,
395
- 157, 157, 157, 157, 157, 157, 157, 157,
396
- 157, 157, 157, 157, 157, 157, 157, 157,
397
- 157, 157, 157, 157, 159, 160, 157, 157,
398
- 157, 157, 157, 157, 157, 157, 157, 157,
399
- 157, 157, 157, 157, 157, 157, 157, 157,
400
- 157, 157, 157, 157, 157, 157, 157, 157,
401
- 157, 157, 157, 157, 157, 157, 157, 157,
402
- 157, 157, 157, 157, 157, 157, 157, 157,
403
- 157, 157, 157, 157, 157, 157, 157, 157,
404
- 161, 157, 157, 157, 157, 157, 157, 157,
405
- 157, 157, 157, 157, 157, 157, 157, 157,
406
- 157, 157, 157, 157, 157, 157, 157, 157,
407
- 157, 157, 157, 157, 157, 157, 157, 157,
408
- 157, 157, 157, 157, 1, 162, 1, 157,
409
- 1, 1, 1, 1, 1, 1, 1, 1,
410
- 1, 1, 1, 1, 1, 1, 1, 1,
411
- 1, 1, 1, 1, 1, 1, 157, 1,
412
- 1, 1, 1, 1, 1, 1, 1, 1,
413
- 1, 1, 1, 1, 1, 1, 1, 1,
414
- 1, 1, 1, 1, 1, 1, 1, 1,
415
- 1, 1, 1, 1, 1, 1, 1, 1,
416
- 1, 1, 1, 1, 1, 1, 1, 1,
400
+ 152, 152, 152, 152, 1, 1, 1, 1,
417
401
  1, 1, 1, 1, 1, 1, 1, 1,
418
402
  1, 1, 1, 1, 1, 1, 1, 1,
419
403
  1, 1, 1, 1, 1, 1, 1, 1,
@@ -421,51 +405,160 @@ self._indicies = [
421
405
  1, 1, 1, 1, 1, 1, 1, 1,
422
406
  1, 1, 1, 1, 1, 1, 1, 1,
423
407
  1, 1, 1, 1, 1, 1, 1, 1,
408
+ 1, 1, 1, 1, 1, 1, 157, 157,
409
+ 157, 157, 157, 157, 157, 157, 157, 157,
410
+ 157, 157, 157, 157, 157, 157, 157, 157,
411
+ 157, 157, 157, 157, 157, 157, 157, 157,
412
+ 157, 157, 157, 157, 158, 159, 159, 159,
413
+ 159, 159, 159, 159, 159, 159, 159, 159,
414
+ 159, 160, 159, 159, 161, 162, 162, 162,
415
+ 163, 1, 164, 164, 164, 164, 164, 164,
416
+ 164, 164, 164, 1, 164, 164, 165, 164,
417
+ 164, 164, 164, 164, 164, 164, 164, 164,
418
+ 164, 164, 164, 164, 164, 164, 164, 164,
419
+ 164, 164, 164, 164, 164, 164, 164, 164,
420
+ 164, 166, 167, 164, 164, 164, 164, 164,
421
+ 164, 164, 164, 164, 164, 164, 164, 164,
422
+ 164, 164, 164, 164, 164, 164, 164, 164,
423
+ 164, 164, 164, 164, 164, 164, 164, 164,
424
+ 164, 164, 164, 164, 164, 164, 164, 164,
425
+ 164, 164, 164, 164, 164, 164, 164, 164,
426
+ 164, 164, 164, 164, 164, 168, 164, 164,
427
+ 164, 164, 164, 164, 164, 164, 164, 164,
428
+ 164, 164, 164, 164, 164, 164, 164, 164,
429
+ 164, 164, 164, 164, 164, 164, 164, 164,
430
+ 164, 164, 164, 164, 164, 164, 164, 164,
431
+ 164, 1, 1, 1, 1, 1, 1, 1,
424
432
  1, 1, 1, 1, 1, 1, 1, 1,
425
433
  1, 1, 1, 1, 1, 1, 1, 1,
426
434
  1, 1, 1, 1, 1, 1, 1, 1,
427
435
  1, 1, 1, 1, 1, 1, 1, 1,
428
- 157, 163, 1, 1, 1, 164, 1, 1,
429
436
  1, 1, 1, 1, 1, 1, 1, 1,
430
437
  1, 1, 1, 1, 1, 1, 1, 1,
431
- 163, 1, 1, 1, 1, 1, 1, 1,
432
- 165, 1, 118, 1, 1, 1, 166, 1,
433
438
  1, 1, 1, 1, 1, 1, 1, 1,
439
+ 1, 1, 1, 169, 169, 169, 169, 169,
440
+ 169, 169, 169, 169, 169, 169, 169, 169,
441
+ 169, 169, 169, 169, 169, 169, 169, 169,
442
+ 169, 169, 169, 169, 169, 169, 169, 169,
443
+ 169, 170, 171, 171, 171, 171, 171, 171,
444
+ 171, 171, 171, 171, 171, 171, 172, 171,
445
+ 171, 173, 174, 174, 174, 175, 1, 176,
446
+ 1, 164, 1, 1, 1, 1, 1, 1,
447
+ 1, 1, 1, 1, 1, 1, 1, 1,
448
+ 1, 1, 1, 1, 1, 1, 1, 1,
449
+ 164, 1, 164, 164, 164, 164, 164, 164,
450
+ 164, 164, 164, 164, 164, 164, 164, 164,
451
+ 164, 164, 164, 164, 164, 164, 164, 164,
452
+ 164, 164, 164, 164, 164, 164, 164, 164,
453
+ 164, 164, 164, 164, 164, 164, 164, 164,
454
+ 164, 164, 164, 164, 164, 164, 164, 164,
455
+ 164, 164, 164, 164, 164, 164, 164, 164,
456
+ 164, 164, 164, 164, 164, 164, 164, 164,
457
+ 164, 164, 164, 164, 164, 164, 164, 164,
458
+ 164, 164, 164, 164, 164, 164, 164, 164,
459
+ 164, 164, 164, 164, 164, 164, 164, 164,
460
+ 164, 164, 164, 164, 164, 164, 164, 164,
461
+ 164, 164, 164, 164, 164, 164, 164, 164,
462
+ 164, 164, 164, 164, 164, 164, 164, 164,
463
+ 164, 164, 164, 164, 164, 164, 164, 164,
464
+ 164, 164, 164, 164, 164, 164, 164, 164,
465
+ 164, 164, 1, 1, 1, 1, 1, 1,
466
+ 1, 1, 1, 1, 1, 1, 1, 1,
467
+ 1, 1, 1, 1, 1, 1, 1, 1,
468
+ 1, 1, 1, 1, 1, 1, 1, 1,
469
+ 1, 1, 1, 1, 1, 1, 1, 1,
470
+ 1, 1, 1, 1, 1, 1, 1, 1,
471
+ 1, 1, 1, 1, 1, 1, 1, 1,
472
+ 1, 1, 1, 1, 1, 1, 1, 1,
473
+ 1, 1, 1, 1, 169, 169, 169, 169,
474
+ 169, 169, 169, 169, 169, 169, 169, 169,
475
+ 169, 169, 169, 169, 169, 169, 169, 169,
476
+ 169, 169, 169, 169, 169, 169, 169, 169,
477
+ 169, 169, 170, 171, 171, 171, 171, 171,
478
+ 171, 171, 171, 171, 171, 171, 171, 172,
479
+ 171, 171, 173, 174, 174, 174, 175, 1,
480
+ 164, 164, 164, 164, 164, 164, 164, 164,
481
+ 164, 164, 164, 164, 164, 164, 164, 164,
482
+ 164, 164, 164, 164, 164, 164, 164, 164,
483
+ 164, 164, 164, 164, 164, 164, 164, 164,
484
+ 164, 164, 164, 164, 164, 164, 164, 164,
485
+ 164, 164, 164, 164, 164, 164, 164, 164,
486
+ 164, 164, 164, 164, 164, 164, 164, 164,
487
+ 164, 164, 164, 164, 164, 164, 164, 164,
488
+ 1, 169, 169, 169, 169, 169, 169, 169,
489
+ 169, 169, 169, 169, 169, 169, 169, 169,
490
+ 169, 169, 169, 169, 169, 169, 169, 169,
491
+ 169, 169, 169, 169, 169, 169, 169, 169,
492
+ 169, 1, 169, 169, 169, 169, 169, 169,
493
+ 169, 169, 169, 169, 169, 169, 169, 169,
494
+ 169, 169, 169, 169, 169, 169, 169, 169,
495
+ 169, 169, 169, 169, 169, 169, 169, 169,
496
+ 169, 169, 169, 169, 169, 169, 169, 169,
497
+ 169, 169, 169, 169, 169, 169, 169, 169,
498
+ 169, 169, 169, 169, 169, 169, 169, 169,
499
+ 169, 169, 169, 169, 169, 169, 169, 169,
500
+ 169, 169, 1, 169, 169, 169, 169, 169,
501
+ 169, 169, 169, 169, 169, 169, 169, 169,
502
+ 169, 169, 169, 169, 169, 169, 169, 169,
503
+ 169, 169, 169, 169, 169, 169, 169, 169,
504
+ 169, 169, 169, 1, 171, 171, 171, 171,
505
+ 171, 171, 171, 171, 171, 171, 171, 171,
506
+ 171, 171, 171, 171, 171, 171, 171, 171,
507
+ 171, 171, 171, 171, 171, 171, 171, 171,
508
+ 171, 171, 171, 171, 171, 171, 171, 171,
509
+ 171, 171, 171, 171, 171, 171, 171, 171,
510
+ 171, 171, 171, 171, 1, 171, 171, 171,
511
+ 171, 171, 171, 171, 171, 171, 171, 171,
512
+ 171, 171, 171, 171, 171, 171, 171, 171,
513
+ 171, 171, 171, 171, 171, 171, 171, 171,
514
+ 171, 171, 171, 171, 171, 171, 171, 171,
515
+ 171, 171, 171, 171, 171, 171, 171, 171,
516
+ 171, 171, 171, 171, 171, 171, 171, 171,
517
+ 171, 171, 171, 171, 171, 171, 171, 171,
518
+ 171, 171, 171, 171, 171, 1, 171, 171,
519
+ 171, 171, 171, 171, 171, 171, 171, 171,
520
+ 171, 171, 171, 171, 171, 171, 1, 177,
521
+ 1, 1, 1, 178, 1, 1, 1, 1,
522
+ 1, 1, 1, 1, 1, 1, 1, 1,
523
+ 1, 1, 1, 1, 1, 1, 177, 1,
524
+ 1, 1, 1, 1, 1, 1, 179, 1,
525
+ 118, 1, 1, 1, 180, 1, 1, 1,
434
526
  1, 1, 1, 1, 1, 1, 1, 1,
435
- 1, 118, 1, 1, 1, 1, 1, 1,
436
- 1, 167, 1, 168, 1, 1, 1, 169,
527
+ 1, 1, 1, 1, 1, 1, 1, 118,
528
+ 1, 1, 1, 1, 1, 1, 1, 181,
529
+ 1, 182, 1, 1, 1, 183, 1, 1,
437
530
  1, 1, 1, 1, 1, 1, 1, 1,
438
531
  1, 1, 1, 1, 1, 1, 1, 1,
439
- 1, 1, 168, 1, 1, 1, 1, 1,
440
- 1, 1, 170, 1, 163, 1, 1, 1,
441
- 164, 1, 1, 1, 1, 1, 1, 1,
532
+ 182, 1, 1, 1, 1, 1, 1, 1,
533
+ 184, 1, 177, 1, 1, 1, 178, 1,
442
534
  1, 1, 1, 1, 1, 1, 1, 1,
443
- 1, 1, 1, 163, 1, 1, 1, 1,
444
- 1, 1, 1, 165, 1, 1, 1, 1,
445
535
  1, 1, 1, 1, 1, 1, 1, 1,
536
+ 1, 177, 1, 1, 1, 1, 1, 1,
537
+ 1, 179, 1, 1, 1, 1, 1, 1,
446
538
  1, 1, 1, 1, 1, 1, 1, 1,
447
- 1, 1, 1, 1, 1, 1, 1, 171,
448
539
  1, 1, 1, 1, 1, 1, 1, 1,
449
- 1, 1, 1, 1, 1, 1, 171, 1,
450
- 163, 1, 1, 1, 164, 1, 1, 1,
540
+ 1, 1, 1, 1, 1, 185, 1, 1,
451
541
  1, 1, 1, 1, 1, 1, 1, 1,
452
- 1, 1, 1, 1, 1, 1, 1, 163,
453
- 1, 1, 1, 1, 1, 1, 1, 165,
542
+ 1, 1, 1, 1, 185, 1, 177, 1,
543
+ 1, 1, 178, 1, 1, 1, 1, 1,
454
544
  1, 1, 1, 1, 1, 1, 1, 1,
545
+ 1, 1, 1, 1, 1, 177, 1, 1,
546
+ 1, 1, 1, 1, 1, 179, 1, 1,
455
547
  1, 1, 1, 1, 1, 1, 1, 1,
456
548
  1, 1, 1, 1, 1, 1, 1, 1,
457
549
  1, 1, 1, 1, 1, 1, 1, 1,
458
- 1, 1, 1, 1, 171, 1, 163, 1,
459
- 1, 1, 164, 1, 1, 1, 1, 1,
460
550
  1, 1, 1, 1, 1, 1, 1, 1,
461
- 1, 1, 1, 1, 1, 163, 1, 1,
462
- 1, 1, 1, 1, 1, 165, 1, 1,
551
+ 1, 1, 185, 1, 177, 1, 1, 1,
552
+ 178, 1, 1, 1, 1, 1, 1, 1,
463
553
  1, 1, 1, 1, 1, 1, 1, 1,
554
+ 1, 1, 1, 177, 1, 1, 1, 1,
555
+ 1, 1, 1, 179, 1, 1, 1, 1,
464
556
  1, 1, 1, 1, 1, 1, 1, 1,
465
557
  1, 1, 1, 1, 1, 1, 1, 1,
466
558
  1, 1, 1, 1, 1, 1, 1, 1,
467
559
  1, 1, 1, 1, 1, 1, 1, 1,
468
- 1, 90, 1, 1, 0
560
+ 1, 1, 1, 1, 1, 1, 1, 90,
561
+ 1, 1, 0
469
562
  ]
470
563
 
471
564
  class << self
@@ -484,17 +577,19 @@ self._trans_targs = [
484
577
  19, 20, 22, 23, 24, 25, 27, 28,
485
578
  26, 24, 25, 27, 28, 29, 31, 32,
486
579
  30, 29, 31, 32, 33, 34, 35, 37,
487
- 38, 48, 96, 99, 100, 101, 36, 34,
580
+ 38, 48, 103, 106, 107, 108, 36, 34,
488
581
  35, 37, 38, 39, 41, 42, 40, 39,
489
582
  41, 42, 43, 44, 45, 47, 46, 44,
490
- 45, 47, 49, 50, 51, 53, 97, 57,
583
+ 45, 47, 49, 50, 51, 53, 104, 57,
491
584
  59, 61, 62, 64, 66, 68, 70, 72,
492
585
  73, 74, 76, 77, 75, 73, 74, 76,
493
586
  77, 78, 79, 81, 78, 79, 81, 80,
494
587
  78, 79, 81, 83, 85, 87, 88, 90,
495
- 92, 93, 92, 102, 95, 92, 93, 92,
496
- 102, 95, 94, 97, 52, 98, 52, 98,
497
- 97, 52, 98, 54
588
+ 92, 93, 92, 109, 95, 96, 97, 98,
589
+ 99, 100, 101, 102, 92, 93, 92, 109,
590
+ 95, 96, 97, 98, 99, 100, 101, 102,
591
+ 94, 104, 52, 105, 52, 105, 104, 52,
592
+ 105, 54
498
593
  ]
499
594
 
500
595
  class << self
@@ -521,9 +616,11 @@ self._trans_actions = [
521
616
  0, 0, 3, 0, 0, 4, 4, 5,
522
617
  4, 1, 1, 8, 0, 0, 3, 0,
523
618
  4, 4, 5, 0, 0, 0, 0, 0,
524
- 9, 9, 10, 11, 9, 0, 0, 3,
525
- 12, 0, 0, 13, 13, 14, 0, 3,
526
- 4, 4, 5, 0
619
+ 9, 9, 10, 11, 9, 9, 9, 9,
620
+ 9, 9, 9, 9, 0, 0, 3, 12,
621
+ 0, 0, 0, 0, 0, 0, 0, 0,
622
+ 0, 13, 13, 14, 0, 3, 4, 4,
623
+ 5, 0
527
624
  ]
528
625
 
529
626
  class << self
@@ -543,7 +640,8 @@ self._eof_actions = [
543
640
  0, 0, 0, 0, 0, 0, 0, 0,
544
641
  0, 0, 0, 0, 0, 0, 0, 0,
545
642
  0, 0, 0, 0, 0, 0, 0, 0,
546
- 13, 0, 4, 13, 13, 13, 0
643
+ 0, 0, 0, 0, 0, 0, 0, 13,
644
+ 0, 4, 13, 13, 13, 0
547
645
  ]
548
646
 
549
647
  class << self
@@ -553,7 +651,7 @@ self.start = 1;
553
651
  class << self
554
652
  attr_accessor :first_final
555
653
  end
556
- self.first_final = 96;
654
+ self.first_final = 103;
557
655
  class << self
558
656
  attr_accessor :error
559
657
  end
@@ -571,7 +669,9 @@ self.en_main = 1;
571
669
 
572
670
 
573
671
  def self.parse(data)
574
- raise Mail::Field::ParseError.new(Mail::DateTimeElement, data, "nil is an invalid DateTime") if data.nil?
672
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
673
+
674
+ raise Mail::Field::NilParseError.new(Mail::DateTimeElement) if data.nil?
575
675
 
576
676
  date_time = DateTimeStruct.new([])
577
677
 
@@ -633,7 +733,7 @@ begin
633
733
  date_s = p end
634
734
  when 13 then
635
735
  begin
636
- date_time.time_string = data[time_s..(p-1)] end
736
+ date_time.time_string = chars(data, time_s, p-1) end
637
737
  when 9 then
638
738
  begin
639
739
  end
@@ -673,12 +773,12 @@ begin
673
773
  end
674
774
  when 6 then
675
775
  begin
676
- date_time.date_string = data[date_s..(p-1)] end
776
+ date_time.date_string = chars(data, date_s, p-1) end
677
777
  begin
678
778
  time_s = p end
679
779
  when 14 then
680
780
  begin
681
- date_time.time_string = data[time_s..(p-1)] end
781
+ date_time.time_string = chars(data, time_s, p-1) end
682
782
  begin
683
783
  begin
684
784
  stack[top] = cs
@@ -739,7 +839,7 @@ begin
739
839
  begin
740
840
  end
741
841
  begin
742
- date_time.date_string = data[date_s..(p-1)] end
842
+ date_time.date_string = chars(data, date_s, p-1) end
743
843
  begin
744
844
  time_s = p end
745
845
  end
@@ -761,7 +861,7 @@ begin
761
861
  case _eof_actions[cs]
762
862
  when 13 then
763
863
  begin
764
- date_time.time_string = data[time_s..(p-1)] end
864
+ date_time.time_string = chars(data, time_s, p-1) end
765
865
  when 4 then
766
866
  begin
767
867
  end
@@ -776,8 +876,8 @@ end
776
876
  end
777
877
 
778
878
 
779
- if p != eof || cs < 96
780
- raise Mail::Field::ParseError.new(Mail::DateTimeElement, data, "Only able to parse up to #{data[0..p]}")
879
+ if p != eof || cs < 103
880
+ raise Mail::Field::IncompleteParseError.new(Mail::DateTimeElement, data, p)
781
881
  end
782
882
 
783
883
  date_time