rack-mail_exception 0.0.1
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.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +38 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/lib/rack/mail_exception.rb +103 -0
- data/test/helper.rb +13 -0
- data/test/test_rack_mail_exception.rb +93 -0
- data/vendor/mail/.bundle/config +2 -0
- data/vendor/mail/CHANGELOG.rdoc +370 -0
- data/vendor/mail/Dependencies.txt +3 -0
- data/vendor/mail/Gemfile +17 -0
- data/vendor/mail/README.rdoc +572 -0
- data/vendor/mail/ROADMAP +92 -0
- data/vendor/mail/Rakefile +41 -0
- data/vendor/mail/TODO.rdoc +9 -0
- data/vendor/mail/lib/mail.rb +76 -0
- data/vendor/mail/lib/mail/attachments_list.rb +99 -0
- data/vendor/mail/lib/mail/body.rb +287 -0
- data/vendor/mail/lib/mail/configuration.rb +67 -0
- data/vendor/mail/lib/mail/core_extensions/blank.rb +26 -0
- data/vendor/mail/lib/mail/core_extensions/nil.rb +11 -0
- data/vendor/mail/lib/mail/core_extensions/string.rb +27 -0
- data/vendor/mail/lib/mail/elements.rb +14 -0
- data/vendor/mail/lib/mail/elements/address.rb +306 -0
- data/vendor/mail/lib/mail/elements/address_list.rb +74 -0
- data/vendor/mail/lib/mail/elements/content_disposition_element.rb +30 -0
- data/vendor/mail/lib/mail/elements/content_location_element.rb +25 -0
- data/vendor/mail/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
- data/vendor/mail/lib/mail/elements/content_type_element.rb +35 -0
- data/vendor/mail/lib/mail/elements/date_time_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/envelope_from_element.rb +34 -0
- data/vendor/mail/lib/mail/elements/message_ids_element.rb +29 -0
- data/vendor/mail/lib/mail/elements/mime_version_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/phrase_list.rb +21 -0
- data/vendor/mail/lib/mail/elements/received_element.rb +30 -0
- data/vendor/mail/lib/mail/encodings.rb +258 -0
- data/vendor/mail/lib/mail/encodings/7bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/8bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/base64.rb +33 -0
- data/vendor/mail/lib/mail/encodings/binary.rb +31 -0
- data/vendor/mail/lib/mail/encodings/quoted_printable.rb +38 -0
- data/vendor/mail/lib/mail/encodings/transfer_encoding.rb +58 -0
- data/vendor/mail/lib/mail/envelope.rb +35 -0
- data/vendor/mail/lib/mail/field.rb +223 -0
- data/vendor/mail/lib/mail/field_list.rb +33 -0
- data/vendor/mail/lib/mail/fields.rb +35 -0
- data/vendor/mail/lib/mail/fields/bcc_field.rb +56 -0
- data/vendor/mail/lib/mail/fields/cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/comments_field.rb +41 -0
- data/vendor/mail/lib/mail/fields/common/address_container.rb +16 -0
- data/vendor/mail/lib/mail/fields/common/common_address.rb +125 -0
- data/vendor/mail/lib/mail/fields/common/common_date.rb +42 -0
- data/vendor/mail/lib/mail/fields/common/common_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/common/common_message_id.rb +43 -0
- data/vendor/mail/lib/mail/fields/common/parameter_hash.rb +52 -0
- data/vendor/mail/lib/mail/fields/content_description_field.rb +19 -0
- data/vendor/mail/lib/mail/fields/content_disposition_field.rb +69 -0
- data/vendor/mail/lib/mail/fields/content_id_field.rb +63 -0
- data/vendor/mail/lib/mail/fields/content_location_field.rb +42 -0
- data/vendor/mail/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/content_type_field.rb +185 -0
- data/vendor/mail/lib/mail/fields/date_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/in_reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/keywords_field.rb +44 -0
- data/vendor/mail/lib/mail/fields/message_id_field.rb +83 -0
- data/vendor/mail/lib/mail/fields/mime_version_field.rb +53 -0
- data/vendor/mail/lib/mail/fields/optional_field.rb +13 -0
- data/vendor/mail/lib/mail/fields/received_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/references_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_bcc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_date_field.rb +35 -0
- data/vendor/mail/lib/mail/fields/resent_from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_message_id_field.rb +34 -0
- data/vendor/mail/lib/mail/fields/resent_sender_field.rb +62 -0
- data/vendor/mail/lib/mail/fields/resent_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/return_path_field.rb +64 -0
- data/vendor/mail/lib/mail/fields/sender_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/structured_field.rb +51 -0
- data/vendor/mail/lib/mail/fields/subject_field.rb +16 -0
- data/vendor/mail/lib/mail/fields/to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/unstructured_field.rb +166 -0
- data/vendor/mail/lib/mail/header.rb +262 -0
- data/vendor/mail/lib/mail/mail.rb +234 -0
- data/vendor/mail/lib/mail/message.rb +1867 -0
- data/vendor/mail/lib/mail/network.rb +9 -0
- data/vendor/mail/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
- data/vendor/mail/lib/mail/network/delivery_methods/sendmail.rb +62 -0
- data/vendor/mail/lib/mail/network/delivery_methods/smtp.rb +110 -0
- data/vendor/mail/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
- data/vendor/mail/lib/mail/network/retriever_methods/imap.rb +18 -0
- data/vendor/mail/lib/mail/network/retriever_methods/pop3.rb +149 -0
- data/vendor/mail/lib/mail/parsers/address_lists.rb +64 -0
- data/vendor/mail/lib/mail/parsers/address_lists.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.rb +387 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.treetop +46 -0
- data/vendor/mail/lib/mail/parsers/content_location.rb +139 -0
- data/vendor/mail/lib/mail/parsers/content_location.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.rb +162 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_type.rb +539 -0
- data/vendor/mail/lib/mail/parsers/content_type.treetop +58 -0
- data/vendor/mail/lib/mail/parsers/date_time.rb +114 -0
- data/vendor/mail/lib/mail/parsers/date_time.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.rb +194 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.treetop +32 -0
- data/vendor/mail/lib/mail/parsers/message_ids.rb +45 -0
- data/vendor/mail/lib/mail/parsers/message_ids.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/mime_version.rb +144 -0
- data/vendor/mail/lib/mail/parsers/mime_version.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.rb +45 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/received.rb +71 -0
- data/vendor/mail/lib/mail/parsers/received.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.rb +464 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.treetop +36 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.rb +5318 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.treetop +410 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
- data/vendor/mail/lib/mail/part.rb +102 -0
- data/vendor/mail/lib/mail/parts_list.rb +34 -0
- data/vendor/mail/lib/mail/patterns.rb +30 -0
- data/vendor/mail/lib/mail/utilities.rb +181 -0
- data/vendor/mail/lib/mail/version.rb +10 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_8.rb +97 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_9.rb +87 -0
- data/vendor/mail/lib/tasks/corpus.rake +125 -0
- data/vendor/mail/lib/tasks/treetop.rake +10 -0
- data/vendor/mail/mail.gemspec +20 -0
- data/vendor/mail/reference/US ASCII Table.txt +130 -0
- data/vendor/mail/reference/rfc1035 Domain Implementation and Specification.txt +3083 -0
- data/vendor/mail/reference/rfc1049 Content-Type Header Field for Internet Messages.txt +451 -0
- data/vendor/mail/reference/rfc1344 Implications of MIME for Internet Mail Gateways.txt +586 -0
- data/vendor/mail/reference/rfc1345 Character Mnemonics & Character Sets.txt +5761 -0
- data/vendor/mail/reference/rfc1524 A User Agent Configuration Mechanism For Multimedia Mail Format Information.txt +675 -0
- data/vendor/mail/reference/rfc1652 SMTP Service Extension for 8bit-MIMEtransport.txt +339 -0
- data/vendor/mail/reference/rfc1892 Multipart Report .txt +227 -0
- data/vendor/mail/reference/rfc1893 Mail System Status Codes.txt +843 -0
- data/vendor/mail/reference/rfc2045 Multipurpose Internet Mail Extensions (1).txt +1739 -0
- data/vendor/mail/reference/rfc2046 Multipurpose Internet Mail Extensions (2).txt +2467 -0
- data/vendor/mail/reference/rfc2047 Multipurpose Internet Mail Extensions (3).txt +843 -0
- data/vendor/mail/reference/rfc2048 Multipurpose Internet Mail Extensions (4).txt +1180 -0
- data/vendor/mail/reference/rfc2049 Multipurpose Internet Mail Extensions (5).txt +1347 -0
- data/vendor/mail/reference/rfc2111 Content-ID and Message-ID URLs.txt +283 -0
- data/vendor/mail/reference/rfc2183 Content-Disposition Header Field.txt +675 -0
- data/vendor/mail/reference/rfc2231 MIME Parameter Value and Encoded Word Extensions.txt +563 -0
- data/vendor/mail/reference/rfc2387 MIME Multipart-Related Content-type.txt +563 -0
- data/vendor/mail/reference/rfc2821 Simple Mail Transfer Protocol.txt +3711 -0
- data/vendor/mail/reference/rfc2822 Internet Message Format.txt +2859 -0
- data/vendor/mail/reference/rfc3462 Reporting of Mail System Administrative Messages.txt +396 -0
- data/vendor/mail/reference/rfc3696 Checking and Transformation of Names.txt +898 -0
- data/vendor/mail/reference/rfc4155 The application-mbox Media Type.txt +502 -0
- data/vendor/mail/reference/rfc4234 Augmented BNF for Syntax Specifications: ABNF.txt +899 -0
- data/vendor/mail/reference/rfc822 Standard for the Format of ARPA Internet Text Messages.txt +2900 -0
- data/vendor/mail/spec/environment.rb +15 -0
- data/vendor/mail/spec/features/making_a_new_message.feature +14 -0
- data/vendor/mail/spec/features/steps/env.rb +6 -0
- data/vendor/mail/spec/features/steps/making_a_new_message_steps.rb +11 -0
- data/vendor/mail/spec/fixtures/attachments/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/attachments/test.gif +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.jpg +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.pdf +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.png +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.tiff +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.zip +0 -0
- data/vendor/mail/spec/fixtures/attachments//343/201/246/343/201/231/343/201/250.txt +2 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_disposition.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_location.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_message_rfc822.eml +92 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_only_email.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_pdf.eml +70 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_encoded_name.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_quoted_filename.eml +60 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/cant_parse_from.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_7-bit.eml +231 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_empty.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_plain.eml +148 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_qp_with_space.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_spam.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_text-html.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_8bits.eml +770 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_semi_colon.eml +269 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_x_uuencode.eml +79 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/empty_group_lists.eml +162 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/header_fields_with_empty_values.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_body.eml +16 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_content_disposition.eml +43 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/multiple_content_types.eml +25 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email11.eml +34 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email12.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email2.eml +114 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email4.eml +59 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email7.eml +66 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_encoded_stack_level_too_deep.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_mimepart_without_content_type.eml +94 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_multipart_mixed_quoted_boundary.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_nested_attachment.eml +100 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_quoted_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/sig_only_email.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/two_from_in_message.eml +42 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment.eml +27 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment_long_name.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce1.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce2.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_422.eml +98 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_530.eml +97 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email10.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email5.eml +19 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email6.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email8.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_bad_time.eml +62 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_double_at_in_header.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_incorrect_header.eml +28 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_multiple_from.eml +30 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_quoted_with_0d0a.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_reply.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_simple.eml +11 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_string_in_date_field.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_trailing_dot.eml +21 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_bad_date.eml +48 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_partially_quoted_subject.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example01.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example02.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example03.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example04.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example05.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example06.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example07.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example08.eml +12 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example09.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example10.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example11.eml +6 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example12.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example13.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/sample_output_multipart +0 -0
- data/vendor/mail/spec/mail/attachments_list_spec.rb +214 -0
- data/vendor/mail/spec/mail/body_spec.rb +385 -0
- data/vendor/mail/spec/mail/configuration_spec.rb +19 -0
- data/vendor/mail/spec/mail/core_extensions/string_spec.rb +62 -0
- data/vendor/mail/spec/mail/core_extensions_spec.rb +99 -0
- data/vendor/mail/spec/mail/elements/address_list_spec.rb +109 -0
- data/vendor/mail/spec/mail/elements/address_spec.rb +609 -0
- data/vendor/mail/spec/mail/elements/date_time_element_spec.rb +20 -0
- data/vendor/mail/spec/mail/elements/envelope_from_element_spec.rb +31 -0
- data/vendor/mail/spec/mail/elements/message_ids_element_spec.rb +43 -0
- data/vendor/mail/spec/mail/elements/phrase_list_spec.rb +22 -0
- data/vendor/mail/spec/mail/elements/received_element_spec.rb +34 -0
- data/vendor/mail/spec/mail/encoding_spec.rb +189 -0
- data/vendor/mail/spec/mail/encodings/base64_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings/quoted_printable_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings_spec.rb +664 -0
- data/vendor/mail/spec/mail/example_emails_spec.rb +303 -0
- data/vendor/mail/spec/mail/field_list_spec.rb +33 -0
- data/vendor/mail/spec/mail/field_spec.rb +198 -0
- data/vendor/mail/spec/mail/fields/bcc_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/cc_field_spec.rb +79 -0
- data/vendor/mail/spec/mail/fields/comments_field_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/address_container_spec.rb +18 -0
- data/vendor/mail/spec/mail/fields/common/common_address_spec.rb +132 -0
- data/vendor/mail/spec/mail/fields/common/common_date_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/common_field_spec.rb +69 -0
- data/vendor/mail/spec/mail/fields/common/common_message_id_spec.rb +30 -0
- data/vendor/mail/spec/mail/fields/common/parameter_hash_spec.rb +56 -0
- data/vendor/mail/spec/mail/fields/content_description_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/content_disposition_field_spec.rb +55 -0
- data/vendor/mail/spec/mail/fields/content_id_field_spec.rb +117 -0
- data/vendor/mail/spec/mail/fields/content_location_field_spec.rb +46 -0
- data/vendor/mail/spec/mail/fields/content_transfer_encoding_field_spec.rb +113 -0
- data/vendor/mail/spec/mail/fields/content_type_field_spec.rb +678 -0
- data/vendor/mail/spec/mail/fields/date_field_spec.rb +73 -0
- data/vendor/mail/spec/mail/fields/envelope_spec.rb +48 -0
- data/vendor/mail/spec/mail/fields/from_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/in_reply_to_field_spec.rb +62 -0
- data/vendor/mail/spec/mail/fields/keywords_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/message_id_field_spec.rb +147 -0
- data/vendor/mail/spec/mail/fields/mime_version_field_spec.rb +166 -0
- data/vendor/mail/spec/mail/fields/received_field_spec.rb +44 -0
- data/vendor/mail/spec/mail/fields/references_field_spec.rb +35 -0
- data/vendor/mail/spec/mail/fields/reply_to_field_spec.rb +67 -0
- data/vendor/mail/spec/mail/fields/resent_bcc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_cc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_date_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/resent_from_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_message_id_field_spec.rb +24 -0
- data/vendor/mail/spec/mail/fields/resent_sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/resent_to_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/return_path_field_spec.rb +52 -0
- data/vendor/mail/spec/mail/fields/sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/structured_field_spec.rb +72 -0
- data/vendor/mail/spec/mail/fields/to_field_spec.rb +92 -0
- data/vendor/mail/spec/mail/fields/unstructured_field_spec.rb +134 -0
- data/vendor/mail/spec/mail/header_spec.rb +578 -0
- data/vendor/mail/spec/mail/mail_spec.rb +34 -0
- data/vendor/mail/spec/mail/message_spec.rb +1409 -0
- data/vendor/mail/spec/mail/mime_messages_spec.rb +435 -0
- data/vendor/mail/spec/mail/multipart_report_spec.rb +112 -0
- data/vendor/mail/spec/mail/network/delivery_methods/file_delivery_spec.rb +79 -0
- data/vendor/mail/spec/mail/network/delivery_methods/sendmail_spec.rb +125 -0
- data/vendor/mail/spec/mail/network/delivery_methods/smtp_spec.rb +133 -0
- data/vendor/mail/spec/mail/network/delivery_methods/test_mailer_spec.rb +57 -0
- data/vendor/mail/spec/mail/network/retriever_methods/pop3_spec.rb +180 -0
- data/vendor/mail/spec/mail/network_spec.rb +359 -0
- data/vendor/mail/spec/mail/parsers/address_lists_parser_spec.rb +15 -0
- data/vendor/mail/spec/mail/parsers/content_transfer_encoding_parser_spec.rb +72 -0
- data/vendor/mail/spec/mail/part_spec.rb +129 -0
- data/vendor/mail/spec/mail/parts_list_spec.rb +12 -0
- data/vendor/mail/spec/mail/round_tripping_spec.rb +44 -0
- data/vendor/mail/spec/mail/utilities_spec.rb +327 -0
- data/vendor/mail/spec/mail/version_specific/escape_paren_1_8_spec.rb +32 -0
- data/vendor/mail/spec/matchers/break_down_to.rb +35 -0
- data/vendor/mail/spec/spec_helper.rb +163 -0
- metadata +442 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Thanks to Nicolas Fouché for this wrapper
|
4
|
+
#
|
5
|
+
require 'singleton'
|
6
|
+
|
7
|
+
module Mail
|
8
|
+
|
9
|
+
# The Configuration class is a Singleton used to hold the default
|
10
|
+
# configuration for all Mail objects.
|
11
|
+
#
|
12
|
+
# Each new mail object gets a copy of these values at initialization
|
13
|
+
# which can be overwritten on a per mail object basis.
|
14
|
+
class Configuration
|
15
|
+
include Singleton
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@delivery_method = nil
|
19
|
+
@retriever_method = nil
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def delivery_method(method = nil, settings = {})
|
24
|
+
return @delivery_method if @delivery_method && method.nil?
|
25
|
+
@delivery_method = lookup_delivery_method(method).new(settings)
|
26
|
+
end
|
27
|
+
|
28
|
+
def lookup_delivery_method(method)
|
29
|
+
case method
|
30
|
+
when nil
|
31
|
+
Mail::SMTP
|
32
|
+
when :smtp
|
33
|
+
Mail::SMTP
|
34
|
+
when :sendmail
|
35
|
+
Mail::Sendmail
|
36
|
+
when :file
|
37
|
+
Mail::FileDelivery
|
38
|
+
when :test
|
39
|
+
Mail::TestMailer
|
40
|
+
else
|
41
|
+
method
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def retriever_method(method = nil, settings = {})
|
46
|
+
return @retriever_method if @retriever_method && method.nil?
|
47
|
+
@retriever_method = lookup_retriever_method(method).new(settings)
|
48
|
+
end
|
49
|
+
|
50
|
+
def lookup_retriever_method(method)
|
51
|
+
case method
|
52
|
+
when nil
|
53
|
+
Mail::POP3
|
54
|
+
when :pop3
|
55
|
+
Mail::POP3
|
56
|
+
else
|
57
|
+
method
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def param_encode_language(value = nil)
|
62
|
+
value ? @encode_language = value : @encode_language ||= 'en'
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class String
|
2
|
+
def blank?() strip.empty? end
|
3
|
+
|
4
|
+
def mb_chars() self end
|
5
|
+
end
|
6
|
+
|
7
|
+
class NilClass
|
8
|
+
def blank?() true end
|
9
|
+
end
|
10
|
+
|
11
|
+
class FalseClass
|
12
|
+
def blank?() true end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Array
|
16
|
+
alias_method :blank?, :empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
class Hash
|
20
|
+
alias_method :blank?, :empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
class Object
|
24
|
+
def blank?() false end
|
25
|
+
def present?() !blank? end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
class String #:nodoc:
|
3
|
+
def to_crlf
|
4
|
+
gsub(/\n|\r\n|\r/) { "\r\n" }
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_lf
|
8
|
+
gsub(/\n|\r\n|\r/) { "\n" }
|
9
|
+
end
|
10
|
+
|
11
|
+
unless method_defined?(:ascii_only?)
|
12
|
+
# Provides all strings with the Ruby 1.9 method of .ascii_only? and
|
13
|
+
# returns true or false
|
14
|
+
US_ASCII_REGEXP = %Q{\x00-\x7f}
|
15
|
+
def ascii_only?
|
16
|
+
!(self =~ /[^#{US_ASCII_REGEXP}]/)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def not_ascii_only?
|
21
|
+
!ascii_only?
|
22
|
+
end
|
23
|
+
|
24
|
+
unless method_defined?(:bytesize)
|
25
|
+
alias :bytesize :length
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Mail
|
2
|
+
autoload :Address, 'mail/elements/address'
|
3
|
+
autoload :AddressList, 'mail/elements/address_list'
|
4
|
+
autoload :ContentDispositionElement, 'mail/elements/content_disposition_element'
|
5
|
+
autoload :ContentLocationElement, 'mail/elements/content_location_element'
|
6
|
+
autoload :ContentTransferEncodingElement, 'mail/elements/content_transfer_encoding_element'
|
7
|
+
autoload :ContentTypeElement, 'mail/elements/content_type_element'
|
8
|
+
autoload :DateTimeElement, 'mail/elements/date_time_element'
|
9
|
+
autoload :EnvelopeFromElement, 'mail/elements/envelope_from_element'
|
10
|
+
autoload :MessageIdsElement, 'mail/elements/message_ids_element'
|
11
|
+
autoload :MimeVersionElement, 'mail/elements/mime_version_element'
|
12
|
+
autoload :PhraseList, 'mail/elements/phrase_list'
|
13
|
+
autoload :ReceivedElement, 'mail/elements/received_element'
|
14
|
+
end
|
@@ -0,0 +1,306 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mail
|
3
|
+
class Address
|
4
|
+
|
5
|
+
include Mail::Utilities
|
6
|
+
|
7
|
+
# Mail::Address handles all email addresses in Mail. It takes an email address string
|
8
|
+
# and parses it, breaking it down into it's component parts and allowing you to get the
|
9
|
+
# address, comments, display name, name, local part, domain part and fully formatted
|
10
|
+
# address.
|
11
|
+
#
|
12
|
+
# Mail::Address requires a correctly formatted email address per RFC2822 or RFC822. It
|
13
|
+
# handles all obsolete versions including obsolete domain routing on the local part.
|
14
|
+
#
|
15
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
16
|
+
# a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
|
17
|
+
# a.address #=> 'mikel@test.lindsaar.net'
|
18
|
+
# a.display_name #=> 'Mikel Lindsaar'
|
19
|
+
# a.local #=> 'mikel'
|
20
|
+
# a.domain #=> 'test.lindsaar.net'
|
21
|
+
# a.comments #=> ['My email address']
|
22
|
+
# a.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
|
23
|
+
def initialize(value = nil)
|
24
|
+
@output_type = nil
|
25
|
+
@tree = nil
|
26
|
+
@raw_text = value
|
27
|
+
case
|
28
|
+
when value.nil?
|
29
|
+
@parsed = false
|
30
|
+
return
|
31
|
+
else
|
32
|
+
parse(value)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the raw imput of the passed in string, this is before it is passed
|
37
|
+
# by the parser.
|
38
|
+
def raw
|
39
|
+
@raw_text
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns a correctly formatted address for the email going out. If given
|
43
|
+
# an incorrectly formatted address as input, Mail::Address will do it's best
|
44
|
+
# to format it correctly. This includes quoting display names as needed and
|
45
|
+
# putting the address in angle brackets etc.
|
46
|
+
#
|
47
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
48
|
+
# a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
|
49
|
+
def format
|
50
|
+
parse unless @parsed
|
51
|
+
case
|
52
|
+
when tree.nil?
|
53
|
+
''
|
54
|
+
when display_name
|
55
|
+
[quote_phrase(display_name), "<#{address}>", format_comments].compact.join(" ")
|
56
|
+
else
|
57
|
+
[address, format_comments].compact.join(" ")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns the address that is in the address itself. That is, the
|
62
|
+
# local@domain string, without any angle brackets or the like.
|
63
|
+
#
|
64
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
65
|
+
# a.address #=> 'mikel@test.lindsaar.net'
|
66
|
+
def address
|
67
|
+
parse unless @parsed
|
68
|
+
domain ? "#{local}@#{domain}" : local
|
69
|
+
end
|
70
|
+
|
71
|
+
# Provides a way to assign an address to an already made Mail::Address object.
|
72
|
+
#
|
73
|
+
# a = Address.new
|
74
|
+
# a.address = 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
|
75
|
+
# a.address #=> 'mikel@test.lindsaar.net'
|
76
|
+
def address=(value)
|
77
|
+
parse(value)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns the display name of the email address passed in.
|
81
|
+
#
|
82
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
83
|
+
# a.display_name #=> 'Mikel Lindsaar'
|
84
|
+
def display_name
|
85
|
+
parse unless @parsed
|
86
|
+
@display_name ||= get_display_name
|
87
|
+
Encodings.decode_encode(@display_name.to_s, @output_type) if @display_name
|
88
|
+
end
|
89
|
+
|
90
|
+
# Provides a way to assign a display name to an already made Mail::Address object.
|
91
|
+
#
|
92
|
+
# a = Address.new
|
93
|
+
# a.address = 'mikel@test.lindsaar.net'
|
94
|
+
# a.display_name = 'Mikel Lindsaar'
|
95
|
+
# a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
|
96
|
+
def display_name=( str )
|
97
|
+
@display_name = str
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns the local part (the left hand side of the @ sign in the email address) of
|
101
|
+
# the address
|
102
|
+
#
|
103
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
104
|
+
# a.local #=> 'mikel'
|
105
|
+
def local
|
106
|
+
parse unless @parsed
|
107
|
+
"#{obs_domain_list}#{get_local.strip}"
|
108
|
+
end
|
109
|
+
|
110
|
+
# Returns the domain part (the right hand side of the @ sign in the email address) of
|
111
|
+
# the address
|
112
|
+
#
|
113
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
114
|
+
# a.domain #=> 'test.lindsaar.net'
|
115
|
+
def domain
|
116
|
+
parse unless @parsed
|
117
|
+
strip_all_comments(get_domain) if get_domain
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns an array of comments that are in the email, or an empty array if there
|
121
|
+
# are no comments
|
122
|
+
#
|
123
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
124
|
+
# a.comments #=> ['My email address']
|
125
|
+
def comments
|
126
|
+
parse unless @parsed
|
127
|
+
if get_comments.empty?
|
128
|
+
nil
|
129
|
+
else
|
130
|
+
get_comments.map { |c| c.squeeze(" ") }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# Sometimes an address will not have a display name, but might have the name
|
135
|
+
# as a comment field after the address. This returns that name if it exists.
|
136
|
+
#
|
137
|
+
# a = Address.new('mikel@test.lindsaar.net (Mikel Lindsaar)')
|
138
|
+
# a.name #=> 'Mikel Lindsaar'
|
139
|
+
def name
|
140
|
+
parse unless @parsed
|
141
|
+
get_name
|
142
|
+
end
|
143
|
+
|
144
|
+
# Returns the format of the address, or returns nothing
|
145
|
+
#
|
146
|
+
# a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
|
147
|
+
# a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
|
148
|
+
def to_s
|
149
|
+
parse unless @parsed
|
150
|
+
format
|
151
|
+
end
|
152
|
+
|
153
|
+
# Shows the Address object basic details, including the Address
|
154
|
+
# a = Address.new('Mikel (My email) <mikel@test.lindsaar.net>')
|
155
|
+
# a.inspect #=> "#<Mail::Address:14184910 Address: |Mikel <mikel@test.lindsaar.net> (My email)| >"
|
156
|
+
def inspect
|
157
|
+
parse unless @parsed
|
158
|
+
"#<#{self.class}:#{self.object_id} Address: |#{to_s}| >"
|
159
|
+
end
|
160
|
+
|
161
|
+
def encoded
|
162
|
+
@output_type = :encode
|
163
|
+
format
|
164
|
+
end
|
165
|
+
|
166
|
+
def decoded
|
167
|
+
@output_type = :decode
|
168
|
+
format
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def parse(value = nil)
|
174
|
+
@parsed = true
|
175
|
+
case
|
176
|
+
when value.nil?
|
177
|
+
nil
|
178
|
+
when value.class == String
|
179
|
+
self.tree = Mail::AddressList.new(value).address_nodes.first
|
180
|
+
else
|
181
|
+
self.tree = value
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
|
186
|
+
def get_domain
|
187
|
+
if tree.respond_to?(:angle_addr)
|
188
|
+
@domain_text ||= tree.angle_addr.addr_spec.domain.text_value.strip
|
189
|
+
elsif tree.respond_to?(:domain)
|
190
|
+
@domain_text ||= tree.domain.text_value.strip
|
191
|
+
elsif tree.respond_to?(:addr_spec)
|
192
|
+
tree.addr_spec.domain.text_value.strip
|
193
|
+
else
|
194
|
+
nil
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def strip_all_comments(string)
|
199
|
+
unless comments.blank?
|
200
|
+
comments.each do |comment|
|
201
|
+
string = string.gsub("(#{comment})", '')
|
202
|
+
end
|
203
|
+
end
|
204
|
+
string.strip
|
205
|
+
end
|
206
|
+
|
207
|
+
def strip_domain_comments(value)
|
208
|
+
unless comments.blank?
|
209
|
+
comments.each do |comment|
|
210
|
+
if get_domain && get_domain.include?("(#{comment})")
|
211
|
+
value = value.gsub("(#{comment})", '')
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
value.to_s.strip
|
216
|
+
end
|
217
|
+
|
218
|
+
def get_comments
|
219
|
+
if tree.respond_to?(:comments)
|
220
|
+
@comments = tree.comments.map { |c| unparen(c.text_value.to_str) }
|
221
|
+
else
|
222
|
+
@comments = []
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def get_display_name
|
227
|
+
if tree.respond_to?(:display_name)
|
228
|
+
name = unquote(tree.display_name.text_value.strip)
|
229
|
+
str = strip_all_comments(name.to_s)
|
230
|
+
elsif comments
|
231
|
+
if domain
|
232
|
+
str = strip_domain_comments(format_comments)
|
233
|
+
else
|
234
|
+
str = nil
|
235
|
+
end
|
236
|
+
else
|
237
|
+
nil
|
238
|
+
end
|
239
|
+
|
240
|
+
if str.blank?
|
241
|
+
nil
|
242
|
+
else
|
243
|
+
str
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def get_name
|
248
|
+
if display_name
|
249
|
+
str = display_name
|
250
|
+
else
|
251
|
+
if comments
|
252
|
+
comment_text = comments.join(' ').squeeze(" ")
|
253
|
+
str = "(#{comment_text})"
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
if str.blank?
|
258
|
+
nil
|
259
|
+
else
|
260
|
+
unparen(str)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
# Provides access to the Treetop parse tree for this address
|
265
|
+
def tree
|
266
|
+
@tree
|
267
|
+
end
|
268
|
+
|
269
|
+
def tree=(value)
|
270
|
+
@tree = value
|
271
|
+
end
|
272
|
+
|
273
|
+
def format_comments
|
274
|
+
if comments
|
275
|
+
comment_text = comments.map {|c| escape_paren(c) }.join(' ').squeeze(" ")
|
276
|
+
@format_comments ||= "(#{comment_text})"
|
277
|
+
else
|
278
|
+
nil
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def obs_domain_list
|
283
|
+
if tree.respond_to?(:angle_addr)
|
284
|
+
obs = tree.angle_addr.elements.select { |e| e.respond_to?(:obs_domain_list) }
|
285
|
+
!obs.empty? ? obs.first.text_value : nil
|
286
|
+
else
|
287
|
+
nil
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
def get_local
|
292
|
+
case
|
293
|
+
when tree.respond_to?(:local_dot_atom_text)
|
294
|
+
tree.local_dot_atom_text.text_value
|
295
|
+
when tree.respond_to?(:angle_addr)
|
296
|
+
tree.angle_addr.addr_spec.local_part.text_value
|
297
|
+
when tree.respond_to?(:addr_spec)
|
298
|
+
tree.addr_spec.local_part.text_value
|
299
|
+
else
|
300
|
+
tree.local_part.text_value
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
|
305
|
+
end
|
306
|
+
end
|