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.
- checksums.yaml +4 -4
- data/README.md +76 -31
- data/lib/mail/attachments_list.rb +3 -1
- data/lib/mail/body.rb +28 -28
- data/lib/mail/encodings/quoted_printable.rb +1 -1
- data/lib/mail/encodings/unix_to_unix.rb +1 -1
- data/lib/mail/encodings.rb +2 -2
- data/lib/mail/field.rb +65 -35
- data/lib/mail/field_list.rb +1 -1
- data/lib/mail/fields/bcc_field.rb +0 -1
- data/lib/mail/fields/cc_field.rb +0 -1
- data/lib/mail/fields/comments_field.rb +0 -1
- data/lib/mail/fields/common_address_field.rb +9 -17
- data/lib/mail/fields/common_date_field.rb +0 -2
- data/lib/mail/fields/common_message_id_field.rb +0 -1
- data/lib/mail/fields/content_description_field.rb +0 -1
- data/lib/mail/fields/content_disposition_field.rb +0 -2
- data/lib/mail/fields/content_id_field.rb +0 -1
- data/lib/mail/fields/content_location_field.rb +0 -1
- data/lib/mail/fields/content_transfer_encoding_field.rb +0 -1
- data/lib/mail/fields/content_type_field.rb +5 -6
- data/lib/mail/fields/date_field.rb +0 -1
- data/lib/mail/fields/from_field.rb +0 -1
- data/lib/mail/fields/in_reply_to_field.rb +0 -1
- data/lib/mail/fields/keywords_field.rb +0 -1
- data/lib/mail/fields/message_id_field.rb +0 -1
- data/lib/mail/fields/mime_version_field.rb +1 -2
- data/lib/mail/fields/named_structured_field.rb +0 -1
- data/lib/mail/fields/named_unstructured_field.rb +0 -1
- data/lib/mail/fields/optional_field.rb +0 -1
- data/lib/mail/fields/received_field.rb +0 -1
- data/lib/mail/fields/references_field.rb +0 -1
- data/lib/mail/fields/reply_to_field.rb +0 -1
- data/lib/mail/fields/resent_bcc_field.rb +0 -1
- data/lib/mail/fields/resent_cc_field.rb +0 -1
- data/lib/mail/fields/resent_date_field.rb +0 -1
- data/lib/mail/fields/resent_from_field.rb +0 -1
- data/lib/mail/fields/resent_message_id_field.rb +0 -1
- data/lib/mail/fields/resent_sender_field.rb +0 -1
- data/lib/mail/fields/resent_to_field.rb +0 -1
- data/lib/mail/fields/return_path_field.rb +0 -1
- data/lib/mail/fields/sender_field.rb +0 -1
- data/lib/mail/fields/structured_field.rb +0 -1
- data/lib/mail/fields/subject_field.rb +0 -1
- data/lib/mail/fields/to_field.rb +0 -1
- data/lib/mail/fields/unstructured_field.rb +0 -1
- data/lib/mail/fields.rb +9 -0
- data/lib/mail/header.rb +1 -1
- data/lib/mail/mail.rb +32 -27
- data/lib/mail/message.rb +22 -19
- data/lib/mail/multibyte/chars.rb +1 -1
- data/lib/mail/multibyte/unicode.rb +1 -1
- data/lib/mail/network/delivery_methods/file_delivery.rb +2 -2
- data/lib/mail/network/delivery_methods/sendmail.rb +2 -48
- data/lib/mail/network/delivery_methods/smtp.rb +77 -42
- data/lib/mail/network/delivery_methods/smtp_connection.rb +7 -7
- data/lib/mail/network/delivery_methods/test_mailer.rb +4 -4
- data/lib/mail/network/retriever_methods/base.rb +5 -5
- data/lib/mail/network/retriever_methods/imap.rb +6 -3
- data/lib/mail/network/retriever_methods/pop3.rb +20 -20
- data/lib/mail/parsers/address_lists_parser.rb +8 -5
- data/lib/mail/parsers/address_lists_parser.rl +4 -0
- data/lib/mail/parsers/content_disposition_parser.rb +15 -12
- data/lib/mail/parsers/content_disposition_parser.rl +4 -0
- data/lib/mail/parsers/content_location_parser.rb +9 -6
- data/lib/mail/parsers/content_location_parser.rl +5 -1
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +8 -5
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +4 -0
- data/lib/mail/parsers/content_type_parser.rb +15 -12
- data/lib/mail/parsers/content_type_parser.rl +4 -0
- data/lib/mail/parsers/date_time_parser.rb +8 -5
- data/lib/mail/parsers/date_time_parser.rl +4 -0
- data/lib/mail/parsers/envelope_from_parser.rb +8 -5
- data/lib/mail/parsers/envelope_from_parser.rl +4 -0
- data/lib/mail/parsers/message_ids_parser.rb +8 -5
- data/lib/mail/parsers/message_ids_parser.rl +4 -0
- data/lib/mail/parsers/mime_version_parser.rb +8 -5
- data/lib/mail/parsers/mime_version_parser.rl +4 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +8 -5
- data/lib/mail/parsers/phrase_lists_parser.rl +4 -0
- data/lib/mail/parsers/received_parser.rb +8 -5
- data/lib/mail/parsers/received_parser.rl +4 -0
- data/lib/mail/part.rb +19 -19
- data/lib/mail/smtp_envelope.rb +1 -1
- data/lib/mail/utilities.rb +5 -5
- data/lib/mail/version.rb +3 -3
- data/lib/mail.rb +2 -5
- metadata +3 -4
- 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
|
-
|
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
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
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
|
-
|
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
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
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
|
@@ -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
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
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
|
@@ -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
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
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
|
@@ -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
|
-
|
3269
|
-
|
3270
|
-
|
3271
|
-
|
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
|
@@ -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
|
-
|
4876
|
-
|
4877
|
-
|
4878
|
-
|
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
|
@@ -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
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
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
|
@@ -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
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
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
|
@@ -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
|
-
|
7542
|
-
|
7543
|
-
|
7544
|
-
|
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
|
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
|
data/lib/mail/smtp_envelope.rb
CHANGED
@@ -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]
|
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
|
|
data/lib/mail/utilities.rb
CHANGED
@@ -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.
|
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(",", "/") + "===").
|
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
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
|
-
|
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
|
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'
|