mail 2.8.1 → 2.9.0.beta1

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -31
  3. data/lib/mail/attachments_list.rb +3 -1
  4. data/lib/mail/body.rb +28 -28
  5. data/lib/mail/encodings/quoted_printable.rb +1 -1
  6. data/lib/mail/encodings/unix_to_unix.rb +1 -1
  7. data/lib/mail/encodings.rb +2 -2
  8. data/lib/mail/field.rb +65 -35
  9. data/lib/mail/field_list.rb +1 -1
  10. data/lib/mail/fields/bcc_field.rb +0 -1
  11. data/lib/mail/fields/cc_field.rb +0 -1
  12. data/lib/mail/fields/comments_field.rb +0 -1
  13. data/lib/mail/fields/common_address_field.rb +9 -17
  14. data/lib/mail/fields/common_date_field.rb +0 -2
  15. data/lib/mail/fields/common_message_id_field.rb +0 -1
  16. data/lib/mail/fields/content_description_field.rb +0 -1
  17. data/lib/mail/fields/content_disposition_field.rb +0 -2
  18. data/lib/mail/fields/content_id_field.rb +0 -1
  19. data/lib/mail/fields/content_location_field.rb +0 -1
  20. data/lib/mail/fields/content_transfer_encoding_field.rb +0 -1
  21. data/lib/mail/fields/content_type_field.rb +5 -6
  22. data/lib/mail/fields/date_field.rb +0 -1
  23. data/lib/mail/fields/from_field.rb +0 -1
  24. data/lib/mail/fields/in_reply_to_field.rb +0 -1
  25. data/lib/mail/fields/keywords_field.rb +0 -1
  26. data/lib/mail/fields/message_id_field.rb +0 -1
  27. data/lib/mail/fields/mime_version_field.rb +1 -2
  28. data/lib/mail/fields/named_structured_field.rb +0 -1
  29. data/lib/mail/fields/named_unstructured_field.rb +0 -1
  30. data/lib/mail/fields/optional_field.rb +0 -1
  31. data/lib/mail/fields/received_field.rb +0 -1
  32. data/lib/mail/fields/references_field.rb +0 -1
  33. data/lib/mail/fields/reply_to_field.rb +0 -1
  34. data/lib/mail/fields/resent_bcc_field.rb +0 -1
  35. data/lib/mail/fields/resent_cc_field.rb +0 -1
  36. data/lib/mail/fields/resent_date_field.rb +0 -1
  37. data/lib/mail/fields/resent_from_field.rb +0 -1
  38. data/lib/mail/fields/resent_message_id_field.rb +0 -1
  39. data/lib/mail/fields/resent_sender_field.rb +0 -1
  40. data/lib/mail/fields/resent_to_field.rb +0 -1
  41. data/lib/mail/fields/return_path_field.rb +0 -1
  42. data/lib/mail/fields/sender_field.rb +0 -1
  43. data/lib/mail/fields/structured_field.rb +0 -1
  44. data/lib/mail/fields/subject_field.rb +0 -1
  45. data/lib/mail/fields/to_field.rb +0 -1
  46. data/lib/mail/fields/unstructured_field.rb +0 -1
  47. data/lib/mail/fields.rb +9 -0
  48. data/lib/mail/header.rb +1 -1
  49. data/lib/mail/mail.rb +32 -27
  50. data/lib/mail/message.rb +22 -19
  51. data/lib/mail/multibyte/chars.rb +1 -1
  52. data/lib/mail/multibyte/unicode.rb +1 -1
  53. data/lib/mail/network/delivery_methods/file_delivery.rb +2 -2
  54. data/lib/mail/network/delivery_methods/sendmail.rb +2 -48
  55. data/lib/mail/network/delivery_methods/smtp.rb +77 -42
  56. data/lib/mail/network/delivery_methods/smtp_connection.rb +7 -7
  57. data/lib/mail/network/delivery_methods/test_mailer.rb +4 -4
  58. data/lib/mail/network/retriever_methods/base.rb +5 -5
  59. data/lib/mail/network/retriever_methods/imap.rb +6 -3
  60. data/lib/mail/network/retriever_methods/pop3.rb +20 -20
  61. data/lib/mail/parsers/address_lists_parser.rb +8 -5
  62. data/lib/mail/parsers/address_lists_parser.rl +4 -0
  63. data/lib/mail/parsers/content_disposition_parser.rb +15 -12
  64. data/lib/mail/parsers/content_disposition_parser.rl +4 -0
  65. data/lib/mail/parsers/content_location_parser.rb +9 -6
  66. data/lib/mail/parsers/content_location_parser.rl +5 -1
  67. data/lib/mail/parsers/content_transfer_encoding_parser.rb +8 -5
  68. data/lib/mail/parsers/content_transfer_encoding_parser.rl +4 -0
  69. data/lib/mail/parsers/content_type_parser.rb +15 -12
  70. data/lib/mail/parsers/content_type_parser.rl +4 -0
  71. data/lib/mail/parsers/date_time_parser.rb +8 -5
  72. data/lib/mail/parsers/date_time_parser.rl +4 -0
  73. data/lib/mail/parsers/envelope_from_parser.rb +8 -5
  74. data/lib/mail/parsers/envelope_from_parser.rl +4 -0
  75. data/lib/mail/parsers/message_ids_parser.rb +8 -5
  76. data/lib/mail/parsers/message_ids_parser.rl +4 -0
  77. data/lib/mail/parsers/mime_version_parser.rb +8 -5
  78. data/lib/mail/parsers/mime_version_parser.rl +4 -0
  79. data/lib/mail/parsers/phrase_lists_parser.rb +8 -5
  80. data/lib/mail/parsers/phrase_lists_parser.rl +4 -0
  81. data/lib/mail/parsers/received_parser.rb +8 -5
  82. data/lib/mail/parsers/received_parser.rl +4 -0
  83. data/lib/mail/part.rb +19 -19
  84. data/lib/mail/smtp_envelope.rb +1 -1
  85. data/lib/mail/utilities.rb +5 -5
  86. data/lib/mail/version.rb +3 -3
  87. data/lib/mail.rb +2 -5
  88. metadata +3 -4
  89. data/lib/mail/check_delivery_params.rb +0 -65
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -589,7 +588,7 @@ begin
589
588
  return content_location if Mail::Utilities.blank?(data)
590
589
 
591
590
  # Parser state
592
- disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil
591
+ qstr_s = qstr = param_val_s = nil
593
592
 
594
593
  # 5.1 Variables Used by Ragel
595
594
  p = 0
@@ -631,10 +630,10 @@ begin
631
630
  _trans = if (_slen > 0 &&
632
631
  _trans_keys[_keys] <= _wide &&
633
632
  _wide <= _trans_keys[_keys + 1])
634
- _indicies[_inds + _wide - _trans_keys[_keys]]
635
- else
636
- _indicies[_inds + _slen]
637
- end
633
+ _indicies[_inds + _wide - _trans_keys[_keys]]
634
+ else
635
+ _indicies[_inds + _slen]
636
+ end
638
637
  cs = _trans_targs[_trans]
639
638
  if _trans_actions[_trans] != 0
640
639
  case _trans_actions[_trans]
@@ -809,6 +808,10 @@ begin
809
808
  end
810
809
  end
811
810
 
811
+ if false
812
+ testEof
813
+ end
814
+
812
815
  if p != eof || cs < 32
813
816
  raise Mail::Field::IncompleteParseError.new(Mail::ContentLocationElement, data, p)
814
817
  end
@@ -54,7 +54,7 @@ module Mail::Parsers
54
54
  return content_location if Mail::Utilities.blank?(data)
55
55
 
56
56
  # Parser state
57
- disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil
57
+ qstr_s = qstr = param_val_s = nil
58
58
 
59
59
  # 5.1 Variables Used by Ragel
60
60
  p = 0
@@ -64,6 +64,10 @@ module Mail::Parsers
64
64
  %%write init;
65
65
  %%write exec;
66
66
 
67
+ if false
68
+ testEof
69
+ end
70
+
67
71
  if p != eof || cs < %%{ write first_final; }%%
68
72
  raise Mail::Field::IncompleteParseError.new(Mail::ContentLocationElement, data, p)
69
73
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -382,10 +381,10 @@ begin
382
381
  _trans = if (_slen > 0 &&
383
382
  _trans_keys[_keys] <= _wide &&
384
383
  _wide <= _trans_keys[_keys + 1])
385
- _indicies[_inds + _wide - _trans_keys[_keys]]
386
- else
387
- _indicies[_inds + _slen]
388
- end
384
+ _indicies[_inds + _wide - _trans_keys[_keys]]
385
+ else
386
+ _indicies[_inds + _slen]
387
+ end
389
388
  cs = _trans_targs[_trans]
390
389
  if _trans_actions[_trans] != 0
391
390
  case _trans_actions[_trans]
@@ -509,6 +508,10 @@ begin
509
508
  end
510
509
  end
511
510
 
511
+ if false
512
+ testEof
513
+ end
514
+
512
515
  if p != eof || cs < 21
513
516
  raise Mail::Field::IncompleteParseError.new(Mail::ContentTransferEncodingElement, data, p)
514
517
  end
@@ -57,6 +57,10 @@ module Mail::Parsers
57
57
  %%write init;
58
58
  %%write exec;
59
59
 
60
+ if false
61
+ testEof
62
+ end
63
+
60
64
  if p != eof || cs < %%{ write first_final; }%%
61
65
  raise Mail::Field::IncompleteParseError.new(Mail::ContentTransferEncodingElement, data, p)
62
66
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -736,10 +735,10 @@ begin
736
735
  _trans = if (_slen > 0 &&
737
736
  _trans_keys[_keys] <= _wide &&
738
737
  _wide <= _trans_keys[_keys + 1])
739
- _indicies[_inds + _wide - _trans_keys[_keys]]
740
- else
741
- _indicies[_inds + _slen]
742
- end
738
+ _indicies[_inds + _wide - _trans_keys[_keys]]
739
+ else
740
+ _indicies[_inds + _slen]
741
+ end
743
742
  cs = _trans_targs[_trans]
744
743
  if _trans_actions[_trans] != 0
745
744
  case _trans_actions[_trans]
@@ -788,7 +787,7 @@ begin
788
787
  # Use quoted s value if one exists, otherwise use parameter value
789
788
  value = qstr || chars(data, param_val_s, p - 1)
790
789
 
791
- content_type.parameters << {param_attr => value}
790
+ content_type.parameters << { param_attr => value }
792
791
  param_attr = nil
793
792
  qstr = nil
794
793
  end
@@ -859,7 +858,7 @@ begin
859
858
  # Use quoted s value if one exists, otherwise use parameter value
860
859
  value = qstr || chars(data, param_val_s, p - 1)
861
860
 
862
- content_type.parameters << {param_attr => value}
861
+ content_type.parameters << { param_attr => value }
863
862
  param_attr = nil
864
863
  qstr = nil
865
864
  end
@@ -889,7 +888,7 @@ begin
889
888
  # Use quoted s value if one exists, otherwise use parameter value
890
889
  value = qstr || chars(data, param_val_s, p - 1)
891
890
 
892
- content_type.parameters << {param_attr => value}
891
+ content_type.parameters << { param_attr => value }
893
892
  param_attr = nil
894
893
  qstr = nil
895
894
  end
@@ -946,7 +945,7 @@ begin
946
945
  # Use quoted s value if one exists, otherwise use parameter value
947
946
  value = qstr || chars(data, param_val_s, p - 1)
948
947
 
949
- content_type.parameters << {param_attr => value}
948
+ content_type.parameters << { param_attr => value }
950
949
  param_attr = nil
951
950
  qstr = nil
952
951
  end
@@ -970,7 +969,7 @@ begin
970
969
  # Use quoted s value if one exists, otherwise use parameter value
971
970
  value = qstr || chars(data, param_val_s, p - 1)
972
971
 
973
- content_type.parameters << {param_attr => value}
972
+ content_type.parameters << { param_attr => value }
974
973
  param_attr = nil
975
974
  qstr = nil
976
975
  end
@@ -1004,7 +1003,7 @@ begin
1004
1003
  # Use quoted s value if one exists, otherwise use parameter value
1005
1004
  value = qstr || chars(data, param_val_s, p - 1)
1006
1005
 
1007
- content_type.parameters << {param_attr => value}
1006
+ content_type.parameters << { param_attr => value }
1008
1007
  param_attr = nil
1009
1008
  qstr = nil
1010
1009
  end
@@ -1022,7 +1021,7 @@ begin
1022
1021
  # Use quoted s value if one exists, otherwise use parameter value
1023
1022
  value = qstr || chars(data, param_val_s, p - 1)
1024
1023
 
1025
- content_type.parameters << {param_attr => value}
1024
+ content_type.parameters << { param_attr => value }
1026
1025
  param_attr = nil
1027
1026
  qstr = nil
1028
1027
  end
@@ -1035,6 +1034,10 @@ begin
1035
1034
  end
1036
1035
  end
1037
1036
 
1037
+ if false
1038
+ testEof
1039
+ end
1040
+
1038
1041
  if p != eof || cs < 47
1039
1042
  raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
1040
1043
  end
@@ -76,6 +76,10 @@ module Mail::Parsers
76
76
  %%write init;
77
77
  %%write exec;
78
78
 
79
+ if false
80
+ testEof
81
+ end
82
+
79
83
  if p != eof || cs < %%{ write first_final; }%%
80
84
  raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
81
85
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -715,10 +714,10 @@ begin
715
714
  _trans = if (_slen > 0 &&
716
715
  _trans_keys[_keys] <= _wide &&
717
716
  _wide <= _trans_keys[_keys + 1])
718
- _indicies[_inds + _wide - _trans_keys[_keys]]
719
- else
720
- _indicies[_inds + _slen]
721
- end
717
+ _indicies[_inds + _wide - _trans_keys[_keys]]
718
+ else
719
+ _indicies[_inds + _slen]
720
+ end
722
721
  cs = _trans_targs[_trans]
723
722
  if _trans_actions[_trans] != 0
724
723
  case _trans_actions[_trans]
@@ -878,6 +877,10 @@ begin
878
877
  end
879
878
  end
880
879
 
880
+ if false
881
+ testEof
882
+ end
883
+
881
884
  if p != eof || cs < 103
882
885
  raise Mail::Field::IncompleteParseError.new(Mail::DateTimeElement, data, p)
883
886
  end
@@ -55,6 +55,10 @@ module Mail::Parsers
55
55
  %%write init;
56
56
  %%write exec;
57
57
 
58
+ if false
59
+ testEof
60
+ end
61
+
58
62
  if p != eof || cs < %%{ write first_final; }%%
59
63
  raise Mail::Field::IncompleteParseError.new(Mail::DateTimeElement, data, p)
60
64
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -3265,10 +3264,10 @@ begin
3265
3264
  _trans = if (_slen > 0 &&
3266
3265
  _trans_keys[_keys] <= _wide &&
3267
3266
  _wide <= _trans_keys[_keys + 1])
3268
- _indicies[_inds + _wide - _trans_keys[_keys]]
3269
- else
3270
- _indicies[_inds + _slen]
3271
- end
3267
+ _indicies[_inds + _wide - _trans_keys[_keys]]
3268
+ else
3269
+ _indicies[_inds + _slen]
3270
+ end
3272
3271
  cs = _trans_targs[_trans]
3273
3272
  if _trans_actions[_trans] != 0
3274
3273
  case _trans_actions[_trans]
@@ -3662,6 +3661,10 @@ begin
3662
3661
  end
3663
3662
  end
3664
3663
 
3664
+ if false
3665
+ testEof
3666
+ end
3667
+
3665
3668
  if p != eof || cs < 257
3666
3669
  raise Mail::Field::IncompleteParseError.new(Mail::EnvelopeFromElement, data, p)
3667
3670
  end
@@ -75,6 +75,10 @@ module Mail::Parsers
75
75
  %%write init;
76
76
  %%write exec;
77
77
 
78
+ if false
79
+ testEof
80
+ end
81
+
78
82
  if p != eof || cs < %%{ write first_final; }%%
79
83
  raise Mail::Field::IncompleteParseError.new(Mail::EnvelopeFromElement, data, p)
80
84
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -4872,10 +4871,10 @@ begin
4872
4871
  _trans = if (_slen > 0 &&
4873
4872
  _trans_keys[_keys] <= _wide &&
4874
4873
  _wide <= _trans_keys[_keys + 1])
4875
- _indicies[_inds + _wide - _trans_keys[_keys]]
4876
- else
4877
- _indicies[_inds + _slen]
4878
- end
4874
+ _indicies[_inds + _wide - _trans_keys[_keys]]
4875
+ else
4876
+ _indicies[_inds + _slen]
4877
+ end
4879
4878
  cs = _trans_targs[_trans]
4880
4879
  if _trans_actions[_trans] != 0
4881
4880
  case _trans_actions[_trans]
@@ -5148,6 +5147,10 @@ begin
5148
5147
  end
5149
5148
  end
5150
5149
 
5150
+ if false
5151
+ testEof
5152
+ end
5153
+
5151
5154
  if p != eof || cs < 318
5152
5155
  raise Mail::Field::IncompleteParseError.new(Mail::MessageIdsElement, data, p)
5153
5156
  end
@@ -79,6 +79,10 @@ module Mail::Parsers
79
79
  %%write init;
80
80
  %%write exec;
81
81
 
82
+ if false
83
+ testEof
84
+ end
85
+
82
86
  if p != eof || cs < %%{ write first_final; }%%
83
87
  raise Mail::Field::IncompleteParseError.new(Mail::MessageIdsElement, data, p)
84
88
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -346,10 +345,10 @@ begin
346
345
  _trans = if (_slen > 0 &&
347
346
  _trans_keys[_keys] <= _wide &&
348
347
  _wide <= _trans_keys[_keys + 1])
349
- _indicies[_inds + _wide - _trans_keys[_keys]]
350
- else
351
- _indicies[_inds + _slen]
352
- end
348
+ _indicies[_inds + _wide - _trans_keys[_keys]]
349
+ else
350
+ _indicies[_inds + _slen]
351
+ end
353
352
  cs = _trans_targs[_trans]
354
353
  if _trans_actions[_trans] != 0
355
354
  case _trans_actions[_trans]
@@ -500,6 +499,10 @@ begin
500
499
  end
501
500
  end
502
501
 
502
+ if false
503
+ testEof
504
+ end
505
+
503
506
  if p != eof || cs < 23
504
507
  raise Mail::Field::IncompleteParseError.new(Mail::MimeVersionElement, data, p)
505
508
  end
@@ -54,6 +54,10 @@ module Mail::Parsers
54
54
  %%write init;
55
55
  %%write exec;
56
56
 
57
+ if false
58
+ testEof
59
+ end
60
+
57
61
  if p != eof || cs < %%{ write first_final; }%%
58
62
  raise Mail::Field::IncompleteParseError.new(Mail::MimeVersionElement, data, p)
59
63
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -726,10 +725,10 @@ begin
726
725
  _trans = if (_slen > 0 &&
727
726
  _trans_keys[_keys] <= _wide &&
728
727
  _wide <= _trans_keys[_keys + 1])
729
- _indicies[_inds + _wide - _trans_keys[_keys]]
730
- else
731
- _indicies[_inds + _slen]
732
- end
728
+ _indicies[_inds + _wide - _trans_keys[_keys]]
729
+ else
730
+ _indicies[_inds + _slen]
731
+ end
733
732
  cs = _trans_targs[_trans]
734
733
  if _trans_actions[_trans] != 0
735
734
  case _trans_actions[_trans]
@@ -871,6 +870,10 @@ begin
871
870
  end
872
871
  end
873
872
 
873
+ if false
874
+ testEof
875
+ end
876
+
874
877
  if p != eof || cs < 42
875
878
  raise Mail::Field::IncompleteParseError.new(Mail::PhraseList, data, p)
876
879
  end
@@ -76,6 +76,10 @@ module Mail::Parsers
76
76
  %%write init;
77
77
  %%write exec;
78
78
 
79
+ if false
80
+ testEof
81
+ end
82
+
79
83
  if p != eof || cs < %%{ write first_final; }%%
80
84
  raise Mail::Field::IncompleteParseError.new(Mail::PhraseList, data, p)
81
85
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require "mail/utilities"
4
3
  require "mail/parser_tools"
@@ -7538,10 +7537,10 @@ begin
7538
7537
  _trans = if (_slen > 0 &&
7539
7538
  _trans_keys[_keys] <= _wide &&
7540
7539
  _wide <= _trans_keys[_keys + 1])
7541
- _indicies[_inds + _wide - _trans_keys[_keys]]
7542
- else
7543
- _indicies[_inds + _slen]
7544
- end
7540
+ _indicies[_inds + _wide - _trans_keys[_keys]]
7541
+ else
7542
+ _indicies[_inds + _slen]
7543
+ end
7545
7544
  cs = _trans_targs[_trans]
7546
7545
  if _trans_actions[_trans] != 0
7547
7546
  case _trans_actions[_trans]
@@ -8769,6 +8768,10 @@ begin
8769
8768
  end
8770
8769
  end
8771
8770
 
8771
+ if false
8772
+ testEof
8773
+ end
8774
+
8772
8775
  if p != eof || cs < 648
8773
8776
  raise Mail::Field::IncompleteParseError.new(Mail::ReceivedElement, data, p)
8774
8777
  end
@@ -77,6 +77,10 @@ module Mail::Parsers
77
77
  %%write init;
78
78
  %%write exec;
79
79
 
80
+ if false
81
+ testEof
82
+ end
83
+
80
84
  if p != eof || cs < %%{ write first_final; }%%
81
85
  raise Mail::Field::IncompleteParseError.new(Mail::ReceivedElement, data, p)
82
86
  end
data/lib/mail/part.rb CHANGED
@@ -9,31 +9,31 @@ module Mail
9
9
  # into the Header. The ContentIdField object will automatically generate
10
10
  # a unique content ID if you try and encode it or output it to_s without
11
11
  # specifying a content id.
12
- #
12
+ #
13
13
  # It will preserve the content ID you specify if you do.
14
14
  def add_content_id(content_id_val = '')
15
15
  header['content-id'] = content_id_val
16
16
  end
17
-
17
+
18
18
  # Returns true if the part has a content ID field, the field may or may
19
19
  # not have a value, but the field exists or not.
20
20
  def has_content_id?
21
21
  header.has_content_id?
22
22
  end
23
-
23
+
24
24
  def cid
25
25
  add_content_id unless has_content_id?
26
26
  Utilities.uri_escape(Utilities.unbracket(content_id))
27
27
  end
28
-
28
+
29
29
  def url
30
30
  "cid:#{cid}"
31
31
  end
32
-
32
+
33
33
  def inline?
34
34
  header[:content_disposition].disposition_type == 'inline' if header[:content_disposition].respond_to?(:disposition_type)
35
35
  end
36
-
36
+
37
37
  def add_required_fields
38
38
  super
39
39
  add_content_id if !has_content_id? && inline?
@@ -42,15 +42,15 @@ module Mail
42
42
  def add_required_message_fields
43
43
  # Override so we don't add Date, MIME-Version, or Message-ID.
44
44
  end
45
-
45
+
46
46
  def delivery_status_report_part?
47
47
  (main_type =~ /message/i && sub_type =~ /delivery-status/i) && body =~ /Status:/
48
48
  end
49
-
49
+
50
50
  def delivery_status_data
51
51
  delivery_status_report_part? ? parse_delivery_status_report : {}
52
52
  end
53
-
53
+
54
54
  def bounced?
55
55
  if action.is_a?(Array)
56
56
  !!(action.first =~ /failed/i)
@@ -58,18 +58,18 @@ module Mail
58
58
  !!(action =~ /failed/i)
59
59
  end
60
60
  end
61
-
62
-
61
+
62
+
63
63
  # Either returns the action if the message has just a single report, or an
64
64
  # array of all the actions, one for each report
65
65
  def action
66
66
  get_return_values('action')
67
67
  end
68
-
68
+
69
69
  def final_recipient
70
70
  get_return_values('final-recipient')
71
71
  end
72
-
72
+
73
73
  def error_status
74
74
  get_return_values('status')
75
75
  end
@@ -77,17 +77,17 @@ module Mail
77
77
  def diagnostic_code
78
78
  get_return_values('diagnostic-code')
79
79
  end
80
-
80
+
81
81
  def remote_mta
82
82
  get_return_values('remote-mta')
83
83
  end
84
-
84
+
85
85
  def retryable?
86
86
  !(error_status =~ /^5/)
87
87
  end
88
88
 
89
89
  private
90
-
90
+
91
91
  def get_return_values(key)
92
92
  if delivery_status_data[key].is_a?(Array)
93
93
  delivery_status_data[key].map { |a| a.value }
@@ -97,7 +97,7 @@ module Mail
97
97
  nil
98
98
  end
99
99
  end
100
-
100
+
101
101
  # A part may not have a header.... so, just init a body if no header
102
102
  def parse_message
103
103
  header_part, body_part = raw_source.split(/#{Constants::LAX_CRLF}#{Constants::WSP}*#{Constants::LAX_CRLF}/m, 2)
@@ -109,11 +109,11 @@ module Mail
109
109
  self.body = raw_source
110
110
  end
111
111
  end
112
-
112
+
113
113
  def parse_delivery_status_report
114
114
  @delivery_status_data ||= Header.new(body.to_s.gsub("\r\n\r\n", "\r\n"))
115
115
  end
116
116
 
117
117
  end
118
-
118
+
119
119
  end
@@ -47,7 +47,7 @@ module Mail
47
47
  raise ArgumentError, "SMTP #{addr_name} address may not exceed #{MAX_ADDRESS_BYTESIZE} bytes: #{addr.inspect}"
48
48
  end
49
49
 
50
- if /[\r\n]/ =~ addr
50
+ if /[\r\n]/.match?(addr)
51
51
  raise ArgumentError, "SMTP #{addr_name} address may not contain CR or LF line breaks: #{addr.inspect}"
52
52
  end
53
53
 
@@ -363,7 +363,7 @@ module Mail
363
363
  if !str.end_with?("=") && str.length % 4 != 0
364
364
  str = str.ljust((str.length + 3) & ~3, "=")
365
365
  end
366
- str.unpack( 'm' ).first
366
+ str.unpack1( 'm' )
367
367
  end
368
368
 
369
369
  def Utilities.encode_base64(str)
@@ -399,7 +399,7 @@ module Mail
399
399
  def Utilities.decode_utf7(utf7)
400
400
  utf7.gsub(/&([^-]+)?-/n) do
401
401
  if $1
402
- ($1.tr(",", "/") + "===").unpack("m")[0].encode(Encoding::UTF_8, Encoding::UTF_16BE)
402
+ ($1.tr(",", "/") + "===").unpack1("m").encode(Encoding::UTF_8, Encoding::UTF_16BE)
403
403
  else
404
404
  "&"
405
405
  end
@@ -420,7 +420,7 @@ module Mail
420
420
  end
421
421
  transcode_to_scrubbed_utf8(str)
422
422
  rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError
423
- warn "Encoding conversion failed #{$!}"
423
+ warn "WARNING: Encoding conversion failed #{$!}"
424
424
  str.dup.force_encoding(Encoding::UTF_8)
425
425
  end
426
426
 
@@ -444,7 +444,7 @@ module Mail
444
444
  end
445
445
  transcode_to_scrubbed_utf8(str)
446
446
  rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
447
- warn "Encoding conversion failed #{$!}"
447
+ warn "WARNING: Encoding conversion failed #{$!}"
448
448
  str.dup.force_encoding(Encoding::UTF_8)
449
449
  end
450
450
 
@@ -453,7 +453,7 @@ module Mail
453
453
  str = charset_encoder.encode(str, encoding) if encoding
454
454
  transcode_to_scrubbed_utf8(str)
455
455
  rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
456
- warn "Encoding conversion failed #{$!}"
456
+ warn "WARNING: Encoding conversion failed #{$!}"
457
457
  str.dup.force_encoding(Encoding::UTF_8)
458
458
  end
459
459
 
data/lib/mail/version.rb CHANGED
@@ -3,9 +3,9 @@ module Mail
3
3
  module VERSION
4
4
 
5
5
  MAJOR = 2
6
- MINOR = 8
7
- PATCH = 1
8
- BUILD = nil
6
+ MINOR = 9
7
+ PATCH = 0
8
+ BUILD = 'beta1'
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
11
11
 
data/lib/mail.rb CHANGED
@@ -48,7 +48,7 @@ module Mail # :doc:
48
48
  require 'mail/field'
49
49
  require 'mail/field_list'
50
50
 
51
- require 'mail/envelope'
51
+ register_autoload :Envelope, 'mail/envelope'
52
52
 
53
53
  # Autoload header field elements and transfer encodings.
54
54
  require 'mail/elements'
@@ -58,10 +58,7 @@ module Mail # :doc:
58
58
  require 'mail/encodings/unix_to_unix'
59
59
 
60
60
  require 'mail/matchers/has_sent_mail'
61
- require 'mail/matchers/attachment_matchers.rb'
62
-
63
- # Deprecated will be removed in 3.0 release
64
- require 'mail/check_delivery_params'
61
+ require 'mail/matchers/attachment_matchers'
65
62
 
66
63
  # Finally... require all the Mail.methods
67
64
  require 'mail/mail'