mail 2.8.1 → 2.9.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.
- 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 +23 -20
 - 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 +11 -7
 - data/lib/mail/version.rb +2 -2
 - data/lib/mail.rb +2 -5
 - metadata +17 -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
    
    | 
         @@ -165,7 +165,11 @@ module Mail 
     | 
|
| 
       165 
165 
     | 
    
         
             
                end
         
     | 
| 
       166 
166 
     | 
    
         | 
| 
       167 
167 
     | 
    
         
             
                def uri_parser
         
     | 
| 
       168 
     | 
    
         
            -
                  @uri_parser ||= URI.const_defined?(:DEFAULT_PARSER) 
     | 
| 
      
 168 
     | 
    
         
            +
                  @uri_parser ||= if URI.const_defined?(:DEFAULT_PARSER)
         
     | 
| 
      
 169 
     | 
    
         
            +
                                    defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER
         
     | 
| 
      
 170 
     | 
    
         
            +
                                  else
         
     | 
| 
      
 171 
     | 
    
         
            +
                                    URI
         
     | 
| 
      
 172 
     | 
    
         
            +
                                  end
         
     | 
| 
       169 
173 
     | 
    
         
             
                end
         
     | 
| 
       170 
174 
     | 
    
         | 
| 
       171 
175 
     | 
    
         
             
                # Matches two objects with their to_s values case insensitively
         
     | 
| 
         @@ -363,7 +367,7 @@ module Mail 
     | 
|
| 
       363 
367 
     | 
    
         
             
                  if !str.end_with?("=") && str.length % 4 != 0
         
     | 
| 
       364 
368 
     | 
    
         
             
                    str = str.ljust((str.length + 3) & ~3, "=")
         
     | 
| 
       365 
369 
     | 
    
         
             
                  end
         
     | 
| 
       366 
     | 
    
         
            -
                  str. 
     | 
| 
      
 370 
     | 
    
         
            +
                  str.unpack1( 'm' )
         
     | 
| 
       367 
371 
     | 
    
         
             
                end
         
     | 
| 
       368 
372 
     | 
    
         | 
| 
       369 
373 
     | 
    
         
             
                def Utilities.encode_base64(str)
         
     | 
| 
         @@ -399,7 +403,7 @@ module Mail 
     | 
|
| 
       399 
403 
     | 
    
         
             
                def Utilities.decode_utf7(utf7)
         
     | 
| 
       400 
404 
     | 
    
         
             
                  utf7.gsub(/&([^-]+)?-/n) do
         
     | 
| 
       401 
405 
     | 
    
         
             
                    if $1
         
     | 
| 
       402 
     | 
    
         
            -
                      ($1.tr(",", "/") + "==="). 
     | 
| 
      
 406 
     | 
    
         
            +
                      ($1.tr(",", "/") + "===").unpack1("m").encode(Encoding::UTF_8, Encoding::UTF_16BE)
         
     | 
| 
       403 
407 
     | 
    
         
             
                    else
         
     | 
| 
       404 
408 
     | 
    
         
             
                      "&"
         
     | 
| 
       405 
409 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -420,7 +424,7 @@ module Mail 
     | 
|
| 
       420 
424 
     | 
    
         
             
                  end
         
     | 
| 
       421 
425 
     | 
    
         
             
                  transcode_to_scrubbed_utf8(str)
         
     | 
| 
       422 
426 
     | 
    
         
             
                rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError
         
     | 
| 
       423 
     | 
    
         
            -
                  warn "Encoding conversion failed #{$!}"
         
     | 
| 
      
 427 
     | 
    
         
            +
                  warn "WARNING: Encoding conversion failed #{$!}"
         
     | 
| 
       424 
428 
     | 
    
         
             
                  str.dup.force_encoding(Encoding::UTF_8)
         
     | 
| 
       425 
429 
     | 
    
         
             
                end
         
     | 
| 
       426 
430 
     | 
    
         | 
| 
         @@ -444,7 +448,7 @@ module Mail 
     | 
|
| 
       444 
448 
     | 
    
         
             
                  end
         
     | 
| 
       445 
449 
     | 
    
         
             
                  transcode_to_scrubbed_utf8(str)
         
     | 
| 
       446 
450 
     | 
    
         
             
                rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
         
     | 
| 
       447 
     | 
    
         
            -
                  warn "Encoding conversion failed #{$!}"
         
     | 
| 
      
 451 
     | 
    
         
            +
                  warn "WARNING: Encoding conversion failed #{$!}"
         
     | 
| 
       448 
452 
     | 
    
         
             
                  str.dup.force_encoding(Encoding::UTF_8)
         
     | 
| 
       449 
453 
     | 
    
         
             
                end
         
     | 
| 
       450 
454 
     | 
    
         | 
| 
         @@ -453,7 +457,7 @@ module Mail 
     | 
|
| 
       453 
457 
     | 
    
         
             
                  str = charset_encoder.encode(str, encoding) if encoding
         
     | 
| 
       454 
458 
     | 
    
         
             
                  transcode_to_scrubbed_utf8(str)
         
     | 
| 
       455 
459 
     | 
    
         
             
                rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
         
     | 
| 
       456 
     | 
    
         
            -
                  warn "Encoding conversion failed #{$!}"
         
     | 
| 
      
 460 
     | 
    
         
            +
                  warn "WARNING: Encoding conversion failed #{$!}"
         
     | 
| 
       457 
461 
     | 
    
         
             
                  str.dup.force_encoding(Encoding::UTF_8)
         
     | 
| 
       458 
462 
     | 
    
         
             
                end
         
     | 
| 
       459 
463 
     | 
    
         | 
| 
         @@ -464,7 +468,7 @@ module Mail 
     | 
|
| 
       464 
468 
     | 
    
         
             
                end
         
     | 
| 
       465 
469 
     | 
    
         | 
| 
       466 
470 
     | 
    
         
             
                def Utilities.uri_parser
         
     | 
| 
       467 
     | 
    
         
            -
                  URI::DEFAULT_PARSER
         
     | 
| 
      
 471 
     | 
    
         
            +
                  defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER
         
     | 
| 
       468 
472 
     | 
    
         
             
                end
         
     | 
| 
       469 
473 
     | 
    
         | 
| 
       470 
474 
     | 
    
         
             
                # Pick a Ruby encoding corresponding to the message charset. Most
         
     |