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,303 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "Test emails" do
|
5
|
+
|
6
|
+
describe "from RFC2822" do
|
7
|
+
|
8
|
+
# From RFC 2822:
|
9
|
+
# This could be called a canonical message. It has a single author,
|
10
|
+
# John Doe, a single recipient, Mary Smith, a subject, the date, a
|
11
|
+
# message identifier, and a textual message in the body.
|
12
|
+
it "should handle the basic test email" do
|
13
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example01.eml'))
|
14
|
+
mail.from.should == ["jdoe@machine.example"]
|
15
|
+
mail.to.should == ['mary@example.net']
|
16
|
+
mail.message_id.should == '1234@local.machine.example'
|
17
|
+
mail.date.should == ::DateTime.parse('21 Nov 1997 09:55:06 -0600')
|
18
|
+
mail.subject.should == 'Saying Hello'
|
19
|
+
end
|
20
|
+
|
21
|
+
# From RFC 2822:
|
22
|
+
# If John's secretary Michael actually sent the message, though John
|
23
|
+
# was the author and replies to this message should go back to him, the
|
24
|
+
# sender field would be used:
|
25
|
+
it "should handle the sender test email" do
|
26
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example02.eml'))
|
27
|
+
mail.from.should == ['jdoe@machine.example']
|
28
|
+
mail.sender.should == 'mjones@machine.example'
|
29
|
+
mail.to.should == ['mary@example.net']
|
30
|
+
mail.message_id.should == '1234@local.machine.example'
|
31
|
+
mail.date.should == ::DateTime.parse('21 Nov 1997 09:55:06 -0600')
|
32
|
+
mail.subject.should == 'Saying Hello'
|
33
|
+
end
|
34
|
+
|
35
|
+
# From RFC 2822:
|
36
|
+
# This message includes multiple addresses in the destination fields
|
37
|
+
# and also uses several different forms of addresses.
|
38
|
+
#
|
39
|
+
# Note that the display names for Joe Q. Public and Giant; "Big" Box
|
40
|
+
# needed to be enclosed in double-quotes because the former contains
|
41
|
+
# the period and the latter contains both semicolon and double-quote
|
42
|
+
# characters (the double-quote characters appearing as quoted-pair
|
43
|
+
# construct). Conversely, the display name for Who? could appear
|
44
|
+
# without them because the question mark is legal in an atom. Notice
|
45
|
+
# also that jdoe@example.org and boss@nil.test have no display names
|
46
|
+
# associated with them at all, and jdoe@example.org uses the simpler
|
47
|
+
# address form without the angle brackets.
|
48
|
+
#
|
49
|
+
# "Giant; \"Big\" Box" <sysservices@example.net>
|
50
|
+
it "should handle multiple recipients test email" do
|
51
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example03.eml'))
|
52
|
+
mail.from.should == ['john.q.public@example.com']
|
53
|
+
mail.to.should == ['mary@x.test', 'jdoe@example.org', 'one@y.test']
|
54
|
+
mail.cc.should == ['boss@nil.test', "sysservices@example.net"]
|
55
|
+
mail.message_id.should == '5678.21-Nov-1997@example.com'
|
56
|
+
mail.date.should == ::DateTime.parse('1 Jul 2003 10:52:37 +0200')
|
57
|
+
end
|
58
|
+
|
59
|
+
# From RFC 2822:
|
60
|
+
# A.1.3. Group addresses
|
61
|
+
# In this message, the "To:" field has a single group recipient named A
|
62
|
+
# Group which contains 3 addresses, and a "Cc:" field with an empty
|
63
|
+
# group recipient named Undisclosed recipients.
|
64
|
+
it "should handle group address email test" do
|
65
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example04.eml'))
|
66
|
+
mail.from.should == ['pete@silly.example']
|
67
|
+
mail.to.should == ['c@a.test', 'joe@where.test', 'jdoe@one.test']
|
68
|
+
mail[:cc].group_names.should == ['Undisclosed recipients']
|
69
|
+
mail.message_id.should == 'testabcd.1234@silly.example'
|
70
|
+
mail.date.should == ::DateTime.parse('Thu, 13 Feb 1969 23:32:54 -0330')
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
# From RFC 2822:
|
75
|
+
# A.2. Reply messages
|
76
|
+
# The following is a series of three messages that make up a
|
77
|
+
# conversation thread between John and Mary. John firsts sends a
|
78
|
+
# message to Mary, Mary then replies to John's message, and then John
|
79
|
+
# replies to Mary's reply message.
|
80
|
+
#
|
81
|
+
# Note especially the "Message-ID:", "References:", and "In-Reply-To:"
|
82
|
+
# fields in each message.
|
83
|
+
it "should handle reply messages" do
|
84
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example05.eml'))
|
85
|
+
mail.from.should == ["jdoe@machine.example"]
|
86
|
+
mail.to.should == ['mary@example.net']
|
87
|
+
mail.subject.should == 'Saying Hello'
|
88
|
+
mail.message_id.should == '1234@local.machine.example'
|
89
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600')
|
90
|
+
end
|
91
|
+
|
92
|
+
# From RFC 2822:
|
93
|
+
# When sending replies, the Subject field is often retained, though
|
94
|
+
# prepended with "Re: " as described in section 3.6.5.
|
95
|
+
# Note the "Reply-To:" field in the below message. When John replies
|
96
|
+
# to Mary's message above, the reply should go to the address in the
|
97
|
+
# "Reply-To:" field instead of the address in the "From:" field.
|
98
|
+
it "should handle reply message 2" do
|
99
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example06.eml'))
|
100
|
+
mail.from.should == ['mary@example.net']
|
101
|
+
mail.to.should == ['jdoe@machine.example']
|
102
|
+
mail.reply_to.should == ['smith@home.example']
|
103
|
+
mail.subject.should == 'Re: Saying Hello'
|
104
|
+
mail.message_id.should == '3456@example.net'
|
105
|
+
mail[:in_reply_to].message_ids.should == ['1234@local.machine.example']
|
106
|
+
mail[:references].message_ids.should == ['1234@local.machine.example']
|
107
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 10:01:10 -0600')
|
108
|
+
end
|
109
|
+
|
110
|
+
# From RFC 2822:
|
111
|
+
# Final reply message
|
112
|
+
it "should handle the final reply message" do
|
113
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example07.eml'))
|
114
|
+
mail.to.should == ['smith@home.example']
|
115
|
+
mail.from.should == ['jdoe@machine.example']
|
116
|
+
mail.subject.should == 'Re: Saying Hello'
|
117
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 11:00:00 -0600')
|
118
|
+
mail.message_id.should == 'abcd.1234@local.machine.tld'
|
119
|
+
mail.in_reply_to.should == '3456@example.net'
|
120
|
+
mail[:references].message_ids.should == ['1234@local.machine.example', '3456@example.net']
|
121
|
+
end
|
122
|
+
|
123
|
+
# From RFC2822
|
124
|
+
# A.3. Resent messages
|
125
|
+
# Say that Mary, upon receiving this message, wishes to send a copy of
|
126
|
+
# the message to Jane such that (a) the message would appear to have
|
127
|
+
# come straight from John; (b) if Jane replies to the message, the
|
128
|
+
# reply should go back to John; and (c) all of the original
|
129
|
+
# information, like the date the message was originally sent to Mary,
|
130
|
+
# the message identifier, and the original addressee, is preserved. In
|
131
|
+
# this case, resent fields are prepended to the message:
|
132
|
+
#
|
133
|
+
# If Jane, in turn, wished to resend this message to another person,
|
134
|
+
# she would prepend her own set of resent header fields to the above
|
135
|
+
# and send that.
|
136
|
+
it "should handle the rfc resent example email" do
|
137
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example08.eml'))
|
138
|
+
mail.resent_from.should == ['mary@example.net']
|
139
|
+
mail.resent_to.should == ['j-brown@other.example']
|
140
|
+
mail.resent_date.should == ::DateTime.parse('Mon, 24 Nov 1997 14:22:01 -0800')
|
141
|
+
mail.resent_message_id.should == '78910@example.net'
|
142
|
+
mail.from.should == ['jdoe@machine.example']
|
143
|
+
mail.to.should == ['mary@example.net']
|
144
|
+
mail.subject.should == 'Saying Hello'
|
145
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600')
|
146
|
+
mail.message_id.should == '1234@local.machine.example'
|
147
|
+
end
|
148
|
+
|
149
|
+
# A.4. Messages with trace fields
|
150
|
+
# As messages are sent through the transport system as described in
|
151
|
+
# [RFC2821], trace fields are prepended to the message. The following
|
152
|
+
# is an example of what those trace fields might look like. Note that
|
153
|
+
# there is some folding white space in the first one since these lines
|
154
|
+
# can be long.
|
155
|
+
it "should handle the RFC trace example email" do
|
156
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example09.eml'))
|
157
|
+
mail.received[0].info.should == 'from x.y.test by example.net via TCP with ESMTP id ABC12345 for <mary@example.net>'
|
158
|
+
mail.received[0].date_time.should == ::DateTime.parse('21 Nov 1997 10:05:43 -0600')
|
159
|
+
mail.received[1].info.should == 'from machine.example by x.y.test'
|
160
|
+
mail.received[1].date_time.should == ::DateTime.parse('21 Nov 1997 10:01:22 -0600')
|
161
|
+
mail.from.should == ['jdoe@machine.example']
|
162
|
+
mail.to.should == ['mary@example.net']
|
163
|
+
mail.subject.should == 'Saying Hello'
|
164
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600')
|
165
|
+
mail.message_id.should == '1234@local.machine.example'
|
166
|
+
end
|
167
|
+
|
168
|
+
# A.5. White space, comments, and other oddities
|
169
|
+
# White space, including folding white space, and comments can be
|
170
|
+
# inserted between many of the tokens of fields. Taking the example
|
171
|
+
# from A.1.3, white space and comments can be inserted into all of the
|
172
|
+
# fields.
|
173
|
+
#
|
174
|
+
# The below example is aesthetically displeasing, but perfectly legal.
|
175
|
+
# Note particularly (1) the comments in the "From:" field (including
|
176
|
+
# one that has a ")" character appearing as part of a quoted-pair); (2)
|
177
|
+
# the white space absent after the ":" in the "To:" field as well as
|
178
|
+
# the comment and folding white space after the group name, the special
|
179
|
+
# character (".") in the comment in Chris Jones's address, and the
|
180
|
+
# folding white space before and after "joe@example.org,"; (3) the
|
181
|
+
# multiple and nested comments in the "Cc:" field as well as the
|
182
|
+
# comment immediately following the ":" after "Cc"; (4) the folding
|
183
|
+
# white space (but no comments except at the end) and the missing
|
184
|
+
# seconds in the time of the date field; and (5) the white space before
|
185
|
+
# (but not within) the identifier in the "Message-ID:" field.
|
186
|
+
|
187
|
+
it "should handle the rfc whitespace test email" do
|
188
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example10.eml'))
|
189
|
+
mail.from.should == ["pete(his account)@silly.test"]
|
190
|
+
mail.to.should == ["c@(Chris's host.)public.example", "joe@example.org", "jdoe@one.test"]
|
191
|
+
mail[:cc].group_names.should == ['(Empty list)(start)Undisclosed recipients ']
|
192
|
+
mail.date.should == ::DateTime.parse('Thu, 13 Feb 1969 23:32 -0330')
|
193
|
+
mail.message_id.should == 'testabcd.1234@silly.test'
|
194
|
+
end
|
195
|
+
|
196
|
+
# A.6. Obsoleted forms
|
197
|
+
# The following are examples of obsolete (that is, the "MUST NOT
|
198
|
+
# generate") syntactic elements described in section 4 of this
|
199
|
+
# document.
|
200
|
+
# A.6.1. Obsolete addressing
|
201
|
+
# Note in the below example the lack of quotes around Joe Q. Public,
|
202
|
+
# the route that appears in the address for Mary Smith, the two commas
|
203
|
+
# that appear in the "To:" field, and the spaces that appear around the
|
204
|
+
# "." in the jdoe address.
|
205
|
+
it "should handle the rfc obsolete addressing" do
|
206
|
+
pending
|
207
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example11.eml'))
|
208
|
+
mail[:from].addresses.should == ['john.q.public@example.com']
|
209
|
+
mail.from.should == '"Joe Q. Public" <john.q.public@example.com>'
|
210
|
+
mail.to.should == ["@machine.tld:mary@example.net", 'jdoe@test.example']
|
211
|
+
mail.date.should == ::DateTime.parse('Tue, 1 Jul 2003 10:52:37 +0200')
|
212
|
+
mail.message_id.should == '5678.21-Nov-1997@example.com'
|
213
|
+
end
|
214
|
+
|
215
|
+
# A.6.2. Obsolete dates
|
216
|
+
#
|
217
|
+
# The following message uses an obsolete date format, including a non-
|
218
|
+
# numeric time zone and a two digit year. Note that although the
|
219
|
+
# day-of-week is missing, that is not specific to the obsolete syntax;
|
220
|
+
# it is optional in the current syntax as well.
|
221
|
+
it "should handle the rfc obsolete dates" do
|
222
|
+
pending
|
223
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example12.eml'))
|
224
|
+
mail.from.should == 'jdoe@machine.example'
|
225
|
+
mail.to.should == 'mary@example.net'
|
226
|
+
mail.date.should == ::DateTime.parse('21 Nov 97 09:55:06 GMT')
|
227
|
+
mail.message_id.should == '1234@local.machine.example'
|
228
|
+
end
|
229
|
+
|
230
|
+
# A.6.3. Obsolete white space and comments
|
231
|
+
#
|
232
|
+
# White space and comments can appear between many more elements than
|
233
|
+
# in the current syntax. Also, folding lines that are made up entirely
|
234
|
+
# of white space are legal.
|
235
|
+
#
|
236
|
+
# Note especially the second line of the "To:" field. It starts with
|
237
|
+
# two space characters. (Note that "__" represent blank spaces.)
|
238
|
+
# Therefore, it is considered part of the folding as described in
|
239
|
+
# section 4.2. Also, the comments and white space throughout
|
240
|
+
# addresses, dates, and message identifiers are all part of the
|
241
|
+
# obsolete syntax.
|
242
|
+
it "should handle the rfc obsolete whitespace email" do
|
243
|
+
pending
|
244
|
+
mail = Mail.read(fixture('emails', 'rfc2822', 'example13.eml'))
|
245
|
+
mail.from.should == 'John Doe <jdoe@machine(comment).example>'
|
246
|
+
mail.to.should == 'Mary Smith <mary@example.net>'
|
247
|
+
mail.date.should == ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600')
|
248
|
+
mail.message_id.should == '1234@local(blah).machine.example'
|
249
|
+
doing { Mail::Message.new(email) }.should_not raise_error
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "from the wild" do
|
255
|
+
|
256
|
+
describe "raw_email_encoded_stack_level_too_deep.eml" do
|
257
|
+
before(:each) do
|
258
|
+
@message = Mail::Message.new(File.read(fixture('emails', 'mime_emails', 'raw_email_encoded_stack_level_too_deep.eml')))
|
259
|
+
end
|
260
|
+
|
261
|
+
it "should return an 'encoded' version without raising a SystemStackError" do
|
262
|
+
doing { @message.encoded }.should_not raise_error
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should have two parts" do
|
266
|
+
@message.parts.length.should == 2
|
267
|
+
end
|
268
|
+
|
269
|
+
end
|
270
|
+
|
271
|
+
describe "sig_only_email.eml" do
|
272
|
+
before(:each) do
|
273
|
+
@message = Mail::Message.new(File.read(fixture('emails', 'mime_emails', 'sig_only_email.eml')))
|
274
|
+
end
|
275
|
+
|
276
|
+
it "should not error on multiart/signed emails" do
|
277
|
+
doing { @message.encoded }.should_not raise_error
|
278
|
+
end
|
279
|
+
|
280
|
+
it "should have one attachment called signature.asc" do
|
281
|
+
@message.attachments.length.should == 1
|
282
|
+
@message.attachments.first.filename.should == 'signature.asc'
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
describe "handling invalid group lists" do
|
288
|
+
before(:each) do
|
289
|
+
@message = Mail::Message.new(File.read(fixture('emails', 'error_emails', 'empty_group_lists.eml')))
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should parse the email and encode without crashing" do
|
293
|
+
doing { @message.encoded }.should_not raise_error
|
294
|
+
end
|
295
|
+
|
296
|
+
it "should return an empty groups list" do
|
297
|
+
@message[:to].group_addresses.should == []
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
end
|
302
|
+
|
303
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mail::FieldList do
|
4
|
+
it "should be able to add new fields" do
|
5
|
+
fl = Mail::FieldList.new
|
6
|
+
fl << Mail::Field.new("To: mikel@me.com")
|
7
|
+
fl << Mail::Field.new("From: mikel@me.com")
|
8
|
+
fl.length.should == 2
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be able to add new fields in the right order" do
|
12
|
+
fl = Mail::FieldList.new
|
13
|
+
fl << Mail::Field.new("To: mikel@me.com")
|
14
|
+
fl << Mail::Field.new("From: mikel@me.com")
|
15
|
+
fl << Mail::Field.new("Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for <xxx@xxxx.xxx>; Sun, 8 May 2005 12:30:23 -0500")
|
16
|
+
fl << Mail::Field.new("Return-Path: mikel@me.com")
|
17
|
+
fl[0].field.class.should == Mail::ReturnPathField
|
18
|
+
fl[1].field.class.should == Mail::ReceivedField
|
19
|
+
fl[2].field.class.should == Mail::FromField
|
20
|
+
fl[3].field.class.should == Mail::ToField
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should add new Received items after the existing ones" do
|
24
|
+
fl = Mail::FieldList.new
|
25
|
+
fl << Mail::Field.new("To: mikel@me.com")
|
26
|
+
fl << Mail::Field.new("From: mikel@me.com")
|
27
|
+
fl << Mail::Field.new("Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for <xxx@xxxx.xxx>; Sun, 8 May 2005 12:30:23 -0500")
|
28
|
+
fl << Mail::Field.new("Return-Path: mikel@me.com")
|
29
|
+
fl << Mail::Field.new("Received: from 123.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for <xxx@xxxx.xxx>; Sun, 8 May 2005 12:30:23 -0500")
|
30
|
+
fl[2].field.value.should == 'from 123.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for <xxx@xxxx.xxx>; Sun, 8 May 2005 12:30:23 -0500'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Mail::Field do
|
5
|
+
|
6
|
+
describe "initialization" do
|
7
|
+
|
8
|
+
it "should be instantiated" do
|
9
|
+
doing {Mail::Field.new('To: Mikel')}.should_not raise_error
|
10
|
+
Mail::Field.new('To: Mikel').field.class.should == Mail::ToField
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should allow you to init on an array" do
|
14
|
+
field = Mail::Field.new("To", ['test1@lindsaar.net', 'Mikel <test2@lindsaar.net>'])
|
15
|
+
field.addresses.should == ["test1@lindsaar.net", "test2@lindsaar.net"]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should allow us to pass an empty value" do
|
19
|
+
doing {Mail::Field.new('To')}.should_not raise_error
|
20
|
+
Mail::Field.new('To').field.class.should == Mail::ToField
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should allow us to pass a value" do
|
24
|
+
doing {Mail::Field.new('To', 'Mikel')}.should_not raise_error
|
25
|
+
Mail::Field.new('To', 'Mikel').field.class.should == Mail::ToField
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should match up fields to class names" do
|
29
|
+
structured_fields = %w[ Date From Sender Reply-To To Cc Bcc Message-ID In-Reply-To
|
30
|
+
References Keywords Resent-Date Resent-From Resent-Sender
|
31
|
+
Resent-To Resent-Cc Resent-Bcc Resent-Message-ID
|
32
|
+
Return-Path Received Subject Comments Mime-Version
|
33
|
+
Content-Transfer-Encoding Content-Description
|
34
|
+
Content-Disposition Content-Type ]
|
35
|
+
structured_fields.each do |sf|
|
36
|
+
words = sf.split("-").map { |a| a.capitalize }
|
37
|
+
klass = "#{words.join}Field"
|
38
|
+
Mail::Field.new("#{sf}: ").field.class.should == Mail.const_get(klass)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should match up fields to class names regardless of case" do
|
43
|
+
structured_fields = %w[ dATE fROM sENDER REPLY-TO TO CC BCC MESSAGE-ID IN-REPLY-TO
|
44
|
+
REFERENCES KEYWORDS resent-date resent-from rESENT-sENDER
|
45
|
+
rESENT-tO rESent-cc resent-bcc reSent-MESSAGE-iD
|
46
|
+
rEtURN-pAtH rEcEiVeD Subject Comments Mime-VeRSIOn
|
47
|
+
cOntenT-transfer-EnCoDiNg Content-Description
|
48
|
+
Content-Disposition cOnTENt-TyPe ]
|
49
|
+
structured_fields.each do |sf|
|
50
|
+
words = sf.split("-").map { |a| a.capitalize }
|
51
|
+
klass = "#{words.join}Field"
|
52
|
+
Mail::Field.new("#{sf}: ").field.class.should == Mail.const_get(klass)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should say anything that is not a known field is an optional field" do
|
57
|
+
unstructured_fields = %w[ Too Becc bccc Random X-Mail MySpecialField ]
|
58
|
+
unstructured_fields.each do |sf|
|
59
|
+
Mail::Field.new("#{sf}: Value").field.class.should == Mail::OptionalField
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should split the name and values out of the raw field passed in" do
|
64
|
+
field = Mail::Field.new('To: Bob')
|
65
|
+
field.name.should == 'To'
|
66
|
+
field.value.should == 'Bob'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should split the name and values out of the raw field passed in if missing whitespace" do
|
70
|
+
field = Mail::Field.new('To:Bob')
|
71
|
+
field.name.should == 'To'
|
72
|
+
field.value.should == 'Bob'
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should split the name and values out of the raw field passed in if having added inapplicable whitespace" do
|
76
|
+
field = Mail::Field.new('To : Bob ')
|
77
|
+
field.name.should == 'To'
|
78
|
+
field.value.should == 'Bob'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return an unstuctured field if the structured field parsing raises an error" do
|
82
|
+
Mail::ToField.should_receive(:new).and_raise(Mail::Field::ParseError)
|
83
|
+
field = Mail::Field.new('To: Bob, ,,, Frank, Smith')
|
84
|
+
field.field.class.should == Mail::UnstructuredField
|
85
|
+
field.name.should == 'To'
|
86
|
+
field.value.should == 'Bob, ,,, Frank, Smith'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should call to_s on it's field when sent to_s" do
|
90
|
+
@field = Mail::SubjectField.new('Subject: Hello bob')
|
91
|
+
Mail::SubjectField.should_receive(:new).and_return(@field)
|
92
|
+
@field.should_receive(:to_s).once
|
93
|
+
Mail::Field.new('Subject: Hello bob').to_s
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should pass missing methods to it's instantiated field class" do
|
97
|
+
field = Mail::Field.new('To: Bob')
|
98
|
+
field.field.should_receive(:addresses).once
|
99
|
+
field.addresses
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should change it's type if you change the name" do
|
103
|
+
field = Mail::Field.new("To: mikel@me.com")
|
104
|
+
field.field.class.should == Mail::ToField
|
105
|
+
field.value = "bob@me.com"
|
106
|
+
field.field.class.should == Mail::ToField
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should create a field without trying to parse if given a symbol" do
|
110
|
+
field = Mail::Field.new('Message-ID')
|
111
|
+
field.field.class.should == Mail::MessageIdField
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "error handling" do
|
117
|
+
it "should populate the errors array if it finds a field it can't deal with" do
|
118
|
+
field = Mail::Field.new('Content-Transfer-Encoding: bit')
|
119
|
+
field.field.errors[0][0].should == 'Content-Transfer-Encoding'
|
120
|
+
field.field.errors[0][1].should == 'bit'
|
121
|
+
field.field.errors[0][2].to_s.should =~ /ContentTransferEncodingElement can not parse |17-bit|/
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "helper methods" do
|
126
|
+
it "should reply if it is responsible for a field name as a capitalized string - structured field" do
|
127
|
+
field = Mail::Field.new("To: mikel@test.lindsaar.net")
|
128
|
+
field.responsible_for?("To").should be_true
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should reply if it is responsible for a field as a lower case string - structured field" do
|
132
|
+
field = Mail::Field.new("To: mikel@test.lindsaar.net")
|
133
|
+
field.responsible_for?("to").should be_true
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should reply if it is responsible for a field as a symbol - structured field" do
|
137
|
+
field = Mail::Field.new("To: mikel@test.lindsaar.net")
|
138
|
+
field.responsible_for?(:to).should be_true
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should say it is == to another if their field names match" do
|
142
|
+
Mail::Field.new("To: mikel").same(Mail::Field.new("To: bob")).should be_true
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should say it is not == to another if their field names do not match" do
|
146
|
+
Mail::Field.new("From: mikel").should_not == Mail::Field.new("To: bob")
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should sort according to the field order" do
|
150
|
+
list = [Mail::Field.new("To: mikel"), Mail::Field.new("Return-Path: bob")]
|
151
|
+
list.sort[0].name.should == "Return-Path"
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "passing an encoding" do
|
157
|
+
it "should allow you to send in unencoded strings to fields and encode them" do
|
158
|
+
subject = Mail::SubjectField.new("This is あ string", 'utf-8')
|
159
|
+
subject.encoded.should == "Subject: This =?UTF-8?Q?is_=E3=81=82=?= string\r\n"
|
160
|
+
subject.decoded.should == "This is あ string"
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should allow you to send in unencoded strings to address fields and encode them" do
|
164
|
+
to = Mail::ToField.new('"Mikel Lindsああr" <mikel@test.lindsaar.net>', 'utf-8')
|
165
|
+
to.encoded.should == "To: =?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>\r\n"
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should allow you to send in unencoded strings without quotes to address fields and encode them" do
|
169
|
+
to = Mail::ToField.new('Mikel Lindsああr <mikel@test.lindsaar.net>', 'utf-8')
|
170
|
+
to.encoded.should == "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>\r\n"
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should allow you to send in unencoded strings to address fields and encode them" do
|
174
|
+
to = Mail::ToField.new("あdあ <ada@test.lindsaar.net>", 'utf-8')
|
175
|
+
to.encoded.should == "To: =?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should allow you to send in multiple unencoded strings to address fields and encode them" do
|
179
|
+
to = Mail::ToField.new(["Mikel Lindsああr <mikel@test.lindsaar.net>", "あdあ <ada@test.lindsaar.net>"], 'utf-8')
|
180
|
+
to.encoded.should == "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>, \r\n\t=?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should allow you to send in multiple unencoded strings to any address field" do
|
184
|
+
mail = Mail.new
|
185
|
+
mail.charset = 'utf-8'
|
186
|
+
array = ["Mikel Lindsああr <mikel@test.lindsaar.net>", "あdあ <ada@test.lindsaar.net>"]
|
187
|
+
field = Mail::ToField.new(array, 'utf-8')
|
188
|
+
field.encoded.should == "#{Mail::ToField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>, \r\n\t=?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
189
|
+
field = Mail::FromField.new(array, 'utf-8')
|
190
|
+
field.encoded.should == "#{Mail::FromField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>, \r\n\t=?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
191
|
+
field = Mail::CcField.new(array, 'utf-8')
|
192
|
+
field.encoded.should == "#{Mail::CcField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>, \r\n\t=?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
193
|
+
field = Mail::ReplyToField.new(array, 'utf-8')
|
194
|
+
field.encoded.should == "#{Mail::ReplyToField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= <mikel@test.lindsaar.net>, \r\n\t=?UTF-8?B?44GCZOOBgg==?= <ada@test.lindsaar.net>\r\n"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|