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,435 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "MIME Emails" do
|
5
|
+
|
6
|
+
describe "general helper methods" do
|
7
|
+
|
8
|
+
it "should read a mime version from an email" do
|
9
|
+
mail = Mail.new("Mime-Version: 1.0")
|
10
|
+
mail.mime_version.should == '1.0'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return nil if the email has no mime version" do
|
14
|
+
mail = Mail.new("To: bob")
|
15
|
+
mail.mime_version.should == nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should read the content-transfer-encoding" do
|
19
|
+
mail = Mail.new("Content-Transfer-Encoding: quoted-printable")
|
20
|
+
mail.content_transfer_encoding.should == 'quoted-printable'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should read the content-description" do
|
24
|
+
mail = Mail.new("Content-Description: This is a description")
|
25
|
+
mail.content_description.should == 'This is a description'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return the content-type" do
|
29
|
+
mail = Mail.new("Content-Type: text/plain")
|
30
|
+
mail.mime_type.should == 'text/plain'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the charset" do
|
34
|
+
mail = Mail.new("Content-Type: text/plain; charset=utf-8")
|
35
|
+
mail.charset.should == 'utf-8'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should allow you to set the charset" do
|
39
|
+
mail = Mail.new
|
40
|
+
mail.charset = 'utf-8'
|
41
|
+
mail.charset.should == 'utf-8'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return the main content-type" do
|
45
|
+
mail = Mail.new("Content-Type: text/plain")
|
46
|
+
mail.main_type.should == 'text'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return the sub content-type" do
|
50
|
+
mail = Mail.new("Content-Type: text/plain")
|
51
|
+
mail.sub_type.should == 'plain'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return the content-type parameters" do
|
55
|
+
mail = Mail.new("Content-Type: text/plain; charset=US-ASCII; format=flowed")
|
56
|
+
mail.content_type_parameters.should == {'charset' => 'US-ASCII', 'format' => 'flowed'}
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should recognize a multipart email" do
|
60
|
+
mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email7.eml'))
|
61
|
+
mail.should be_multipart
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should recognize a non multipart email" do
|
65
|
+
mail = Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml'))
|
66
|
+
mail.should_not be_multipart
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should give how may (top level) parts there are" do
|
70
|
+
mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email7.eml'))
|
71
|
+
mail.parts.length.should == 2
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should give the content_type of each part" do
|
75
|
+
mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email11.eml'))
|
76
|
+
mail.mime_type.should == 'multipart/alternative'
|
77
|
+
mail.parts[0].mime_type.should == 'text/plain'
|
78
|
+
mail.parts[1].mime_type.should == 'text/enriched'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should report the mail :has_attachments?" do
|
82
|
+
mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_pdf.eml')))
|
83
|
+
mail.should be_has_attachments
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "multipart emails" do
|
89
|
+
it "should add a boundary if there is none defined and a part is added" do
|
90
|
+
mail = Mail.new do
|
91
|
+
part('This is a part')
|
92
|
+
part('This is another part')
|
93
|
+
end
|
94
|
+
mail.boundary.should_not be_nil
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not add a boundary for a message that is only an attachment" do
|
98
|
+
mail = Mail.new
|
99
|
+
mail.attachments['test.png'] = "2938492384923849"
|
100
|
+
mail.boundary.should be_nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "multipart/alternative emails" do
|
105
|
+
|
106
|
+
it "should know what it's boundary is if it is a multipart document" do
|
107
|
+
mail = Mail.new('Content-Type: multipart/mixed; boundary="--==Boundary"')
|
108
|
+
mail.boundary.should == "--==Boundary"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should return nil if there is no content-type defined" do
|
112
|
+
mail = Mail.new
|
113
|
+
mail.boundary.should == nil
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should allow you to assign a text part" do
|
117
|
+
mail = Mail.new
|
118
|
+
text_mail = Mail.new("This is Text")
|
119
|
+
doing { mail.text_part = text_mail }.should_not raise_error
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should assign the text part and allow you to reference" do
|
123
|
+
mail = Mail.new
|
124
|
+
text_mail = Mail.new("This is Text")
|
125
|
+
mail.text_part = text_mail
|
126
|
+
mail.text_part.should == text_mail
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should allow you to assign a html part" do
|
130
|
+
mail = Mail.new
|
131
|
+
html_mail = Mail.new("<b>This is HTML</b>")
|
132
|
+
doing { mail.text_part = html_mail }.should_not raise_error
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should assign the html part and allow you to reference" do
|
136
|
+
mail = Mail.new
|
137
|
+
html_mail = Mail.new("<b>This is HTML</b>")
|
138
|
+
mail.html_part = html_mail
|
139
|
+
mail.html_part.should == html_mail
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should add the html part and text part" do
|
143
|
+
mail = Mail.new
|
144
|
+
mail.text_part = Mail::Part.new do
|
145
|
+
body "This is Text"
|
146
|
+
end
|
147
|
+
mail.html_part = Mail::Part.new do
|
148
|
+
content_type = "text/html; charset=US-ASCII"
|
149
|
+
body = "<b>This is HTML</b>"
|
150
|
+
end
|
151
|
+
mail.parts.length.should == 2
|
152
|
+
mail.parts.first.class.should == Mail::Part
|
153
|
+
mail.parts.last.class.should == Mail::Part
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should set the content type to multipart/alternative if you use the html_part and text_part helpers" do
|
157
|
+
mail = Mail.new
|
158
|
+
mail.text_part = Mail::Part.new do
|
159
|
+
body "This is Text"
|
160
|
+
end
|
161
|
+
mail.html_part = Mail::Part.new do
|
162
|
+
content_type = "text/html; charset=US-ASCII"
|
163
|
+
body "<b>This is HTML</b>"
|
164
|
+
end
|
165
|
+
mail.to_s.should =~ %r|Content-Type: multipart/alternative;\s+boundary="#{mail.boundary}"|
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should add the end boundary tag" do
|
169
|
+
mail = Mail.new
|
170
|
+
mail.text_part = Mail::Part.new do
|
171
|
+
body "This is Text"
|
172
|
+
end
|
173
|
+
mail.html_part = Mail::Part.new do
|
174
|
+
content_type = "text/html; charset=US-ASCII"
|
175
|
+
body "<b>This is HTML</b>"
|
176
|
+
end
|
177
|
+
mail.to_s.should =~ %r|#{mail.boundary}--|
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should not put message-ids into parts" do
|
181
|
+
mail = Mail.new('Subject: FooBar')
|
182
|
+
mail.text_part = Mail::Part.new do
|
183
|
+
body "This is Text"
|
184
|
+
end
|
185
|
+
mail.html_part = Mail::Part.new do
|
186
|
+
content_type = "text/html; charset=US-ASCII"
|
187
|
+
body "<b>This is HTML</b>"
|
188
|
+
end
|
189
|
+
mail.to_s
|
190
|
+
mail.parts.first.message_id.should be_nil
|
191
|
+
mail.parts.last.message_id.should be_nil
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should create a multipart/alternative email through a block" do
|
195
|
+
mail = Mail.new do
|
196
|
+
to 'nicolas.fouche@gmail.com'
|
197
|
+
from 'Mikel Lindsaar <raasdnil@gmail.com>'
|
198
|
+
subject 'First multipart email sent with Mail'
|
199
|
+
text_part do
|
200
|
+
body 'This is plain text'
|
201
|
+
end
|
202
|
+
html_part do
|
203
|
+
content_type 'text/html; charset=UTF-8'
|
204
|
+
body '<h1>This is HTML</h1>'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
mail.should be_multipart
|
208
|
+
mail.parts.length.should == 2
|
209
|
+
mail.text_part.class.should == Mail::Part
|
210
|
+
mail.text_part.body.to_s.should == 'This is plain text'
|
211
|
+
mail.html_part.class.should == Mail::Part
|
212
|
+
mail.html_part.body.to_s.should == '<h1>This is HTML</h1>'
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should detect an html_part in an existing email" do
|
216
|
+
m = Mail.new(:content_type => 'multipart/alternative')
|
217
|
+
m.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT'))
|
218
|
+
m.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT'))
|
219
|
+
m.text_part.body.decoded.should == 'PLAIN TEXT'
|
220
|
+
m.html_part.body.decoded.should == 'HTML TEXT'
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should detect an html_part in a multi level mime email" do
|
224
|
+
m = Mail.new(:content_type => 'multipart/mixed')
|
225
|
+
a = Mail::Part.new(:content_type => 'text/script', :body => '12345')
|
226
|
+
p = Mail::Part.new(:content_type => 'multipart/alternative')
|
227
|
+
p.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT'))
|
228
|
+
p.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT'))
|
229
|
+
m.add_part(p)
|
230
|
+
m.add_part(a)
|
231
|
+
m.text_part.body.decoded.should == 'PLAIN TEXT'
|
232
|
+
m.html_part.body.decoded.should == 'HTML TEXT'
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should only the first part on a stupidly overly complex email" do
|
236
|
+
m = Mail.new(:content_type => 'multipart/mixed')
|
237
|
+
a = Mail::Part.new(:content_type => 'text/script', :body => '12345')
|
238
|
+
m.add_part(a)
|
239
|
+
|
240
|
+
b = Mail::Part.new(:content_type => 'multipart/alternative')
|
241
|
+
b.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT'))
|
242
|
+
b.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT'))
|
243
|
+
m.add_part(b)
|
244
|
+
|
245
|
+
c = Mail::Part.new(:content_type => 'multipart/alternative')
|
246
|
+
c.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML 2 TEXT'))
|
247
|
+
c.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN 2 TEXT'))
|
248
|
+
b.add_part(c)
|
249
|
+
|
250
|
+
d = Mail::Part.new(:content_type => 'multipart/alternative')
|
251
|
+
d.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML 3 TEXT'))
|
252
|
+
d.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN 3 TEXT'))
|
253
|
+
b.add_part(d)
|
254
|
+
|
255
|
+
m.text_part.body.decoded.should == 'PLAIN TEXT'
|
256
|
+
m.html_part.body.decoded.should == 'HTML TEXT'
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
describe "finding attachments" do
|
262
|
+
|
263
|
+
it "should return an array of attachments" do
|
264
|
+
mail = Mail.read(fixture('emails', 'attachment_emails', 'attachment_content_disposition.eml'))
|
265
|
+
mail.attachments.length.should == 1
|
266
|
+
mail.attachments.first.filename.should == 'hello.rb'
|
267
|
+
end
|
268
|
+
|
269
|
+
it "should return an array of attachments" do
|
270
|
+
mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email_with_nested_attachment.eml'))
|
271
|
+
mail.attachments.length.should == 2
|
272
|
+
mail.attachments[0].filename.should == 'byo-ror-cover.png'
|
273
|
+
mail.attachments[1].filename.should == 'smime.p7s'
|
274
|
+
end
|
275
|
+
|
276
|
+
end
|
277
|
+
|
278
|
+
describe "adding a file attachment" do
|
279
|
+
|
280
|
+
it "should set to multipart/mixed if a text part and you add an attachment" do
|
281
|
+
mail = Mail::Message.new
|
282
|
+
mail.text_part { body("log message goes here") }
|
283
|
+
mail.add_file(fixture('attachments', 'test.png'))
|
284
|
+
mail.mime_type.should == 'multipart/mixed'
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should set to multipart/mixed if you add an attachment and then a text part" do
|
288
|
+
mail = Mail::Message.new
|
289
|
+
mail.add_file(fixture('attachments', 'test.png'))
|
290
|
+
mail.text_part { body("log message goes here") }
|
291
|
+
mail.mime_type.should == 'multipart/mixed'
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should add a part given a filename" do
|
295
|
+
mail = Mail::Message.new
|
296
|
+
mail.add_file(fixture('attachments', 'test.png'))
|
297
|
+
mail.parts.length.should == 1 # First part is an empty text body
|
298
|
+
end
|
299
|
+
|
300
|
+
it "should give the part the right content type" do
|
301
|
+
mail = Mail::Message.new
|
302
|
+
mail.add_file(fixture('attachments', 'test.png'))
|
303
|
+
mail.parts.first[:content_type].content_type.should == 'image/png'
|
304
|
+
end
|
305
|
+
|
306
|
+
it "should return attachment objects" do
|
307
|
+
mail = Mail::Message.new
|
308
|
+
mail.add_file(fixture('attachments', 'test.png'))
|
309
|
+
mail.attachments.first.class.should == Mail::Part
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should be return an aray of attachments" do
|
313
|
+
mail = Mail::Message.new do
|
314
|
+
from 'mikel@from.lindsaar.net'
|
315
|
+
subject 'Hello there Mikel'
|
316
|
+
to 'mikel@to.lindsaar.net'
|
317
|
+
add_file fixture('attachments', 'test.png')
|
318
|
+
add_file fixture('attachments', 'test.jpg')
|
319
|
+
add_file fixture('attachments', 'test.pdf')
|
320
|
+
add_file fixture('attachments', 'test.zip')
|
321
|
+
end
|
322
|
+
mail.attachments.length.should == 4
|
323
|
+
mail.attachments.each { |a| a.class.should == Mail::Part }
|
324
|
+
end
|
325
|
+
|
326
|
+
it "should return the filename of each attachment" do
|
327
|
+
mail = Mail::Message.new do
|
328
|
+
from 'mikel@from.lindsaar.net'
|
329
|
+
subject 'Hello there Mikel'
|
330
|
+
to 'mikel@to.lindsaar.net'
|
331
|
+
add_file fixture('attachments', 'test.png')
|
332
|
+
add_file fixture('attachments', 'test.jpg')
|
333
|
+
add_file fixture('attachments', 'test.pdf')
|
334
|
+
add_file fixture('attachments', 'test.zip')
|
335
|
+
end
|
336
|
+
mail.attachments[0].filename.should == 'test.png'
|
337
|
+
mail.attachments[1].filename.should == 'test.jpg'
|
338
|
+
mail.attachments[2].filename.should == 'test.pdf'
|
339
|
+
mail.attachments[3].filename.should == 'test.zip'
|
340
|
+
end
|
341
|
+
|
342
|
+
it "should return the type/subtype of each attachment" do
|
343
|
+
mail = Mail::Message.new do
|
344
|
+
from 'mikel@from.lindsaar.net'
|
345
|
+
subject 'Hello there Mikel'
|
346
|
+
to 'mikel@to.lindsaar.net'
|
347
|
+
add_file fixture('attachments', 'test.png')
|
348
|
+
add_file fixture('attachments', 'test.jpg')
|
349
|
+
add_file fixture('attachments', 'test.pdf')
|
350
|
+
add_file fixture('attachments', 'test.zip')
|
351
|
+
end
|
352
|
+
mail.attachments[0].mime_type.should == 'image/png'
|
353
|
+
mail.attachments[1].mime_type.should == 'image/jpeg'
|
354
|
+
mail.attachments[2].mime_type.should == 'application/pdf'
|
355
|
+
mail.attachments[3].mime_type.should == 'application/zip'
|
356
|
+
end
|
357
|
+
|
358
|
+
it "should return the content of each attachment" do
|
359
|
+
mail = Mail::Message.new do
|
360
|
+
from 'mikel@from.lindsaar.net'
|
361
|
+
subject 'Hello there Mikel'
|
362
|
+
to 'mikel@to.lindsaar.net'
|
363
|
+
add_file fixture('attachments', 'test.png')
|
364
|
+
add_file fixture('attachments', 'test.jpg')
|
365
|
+
add_file fixture('attachments', 'test.pdf')
|
366
|
+
add_file fixture('attachments', 'test.zip')
|
367
|
+
end
|
368
|
+
if RUBY_VERSION >= '1.9'
|
369
|
+
tripped = mail.attachments[0].decoded
|
370
|
+
original = File.read(fixture('attachments', 'test.png')).force_encoding(Encoding::BINARY)
|
371
|
+
tripped.should == original
|
372
|
+
tripped = mail.attachments[1].decoded
|
373
|
+
original = File.read(fixture('attachments', 'test.jpg')).force_encoding(Encoding::BINARY)
|
374
|
+
tripped.should == original
|
375
|
+
tripped = mail.attachments[2].decoded
|
376
|
+
original = File.read(fixture('attachments', 'test.pdf')).force_encoding(Encoding::BINARY)
|
377
|
+
tripped.should == original
|
378
|
+
tripped = mail.attachments[3].decoded
|
379
|
+
original = File.read(fixture('attachments', 'test.zip')).force_encoding(Encoding::BINARY)
|
380
|
+
tripped.should == original
|
381
|
+
else
|
382
|
+
mail.attachments[0].decoded.should == File.read(fixture('attachments', 'test.png'))
|
383
|
+
mail.attachments[1].decoded.should == File.read(fixture('attachments', 'test.jpg'))
|
384
|
+
mail.attachments[2].decoded.should == File.read(fixture('attachments', 'test.pdf'))
|
385
|
+
mail.attachments[3].decoded.should == File.read(fixture('attachments', 'test.zip'))
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
it "should allow you to send in file data instead of having to read it" do
|
390
|
+
file_data = File.read(fixture('attachments', 'test.png'))
|
391
|
+
mail = Mail::Message.new do
|
392
|
+
from 'mikel@from.lindsaar.net'
|
393
|
+
subject 'Hello there Mikel'
|
394
|
+
to 'mikel@to.lindsaar.net'
|
395
|
+
add_file(:filename => 'test.png', :content => file_data)
|
396
|
+
end
|
397
|
+
if RUBY_VERSION >= '1.9'
|
398
|
+
tripped = mail.attachments[0].decoded
|
399
|
+
original = File.read(fixture('attachments', 'test.png')).force_encoding(Encoding::BINARY)
|
400
|
+
tripped.should == original
|
401
|
+
else
|
402
|
+
mail.attachments[0].decoded.should == File.read(fixture('attachments', 'test.png'))
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
it "should be able to add a body before adding a file" do
|
407
|
+
m = Mail.new do
|
408
|
+
from 'mikel@from.lindsaar.net'
|
409
|
+
subject 'Hello there Mikel'
|
410
|
+
to 'mikel@to.lindsaar.net'
|
411
|
+
body "Attached"
|
412
|
+
add_file fixture('attachments', 'test.png')
|
413
|
+
end
|
414
|
+
m.attachments.length.should == 1
|
415
|
+
m.parts.length.should == 2
|
416
|
+
m.parts[0].body.should == "Attached"
|
417
|
+
m.parts[1].filename.should == "test.png"
|
418
|
+
end
|
419
|
+
|
420
|
+
it "should allow you to add a body as text part if you have added a file" do
|
421
|
+
m = Mail.new do
|
422
|
+
from 'mikel@from.lindsaar.net'
|
423
|
+
subject 'Hello there Mikel'
|
424
|
+
to 'mikel@to.lindsaar.net'
|
425
|
+
add_file fixture('attachments', 'test.png')
|
426
|
+
body "Attached"
|
427
|
+
end
|
428
|
+
m.parts.length.should == 2
|
429
|
+
m.parts.first[:content_type].content_type.should == 'image/png'
|
430
|
+
m.parts.last[:content_type].content_type.should == 'text/plain'
|
431
|
+
end
|
432
|
+
|
433
|
+
end
|
434
|
+
|
435
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "multipart/report emails" do
|
5
|
+
|
6
|
+
it "should know if it is a multipart report type" do
|
7
|
+
mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml'))
|
8
|
+
mail.should be_multipart_report
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "delivery-status reports" do
|
12
|
+
|
13
|
+
it "should know if it is a deliver-status report" do
|
14
|
+
mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml'))
|
15
|
+
mail.should be_delivery_status_report
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should find it's message/delivery-status part" do
|
19
|
+
mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml'))
|
20
|
+
mail.delivery_status_part.should_not be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "multipart reports with more than one address" do
|
24
|
+
it "should not crash" do
|
25
|
+
mail1 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce1.eml'))
|
26
|
+
mail2 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce2.eml'))
|
27
|
+
doing { mail1.bounced? }.should_not raise_error
|
28
|
+
doing { mail2.bounced? }.should_not raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not know that a multi address email was bounced" do
|
32
|
+
mail1 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce1.eml'))
|
33
|
+
mail2 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce2.eml'))
|
34
|
+
mail1.should be_bounced
|
35
|
+
mail2.should be_bounced
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "temporary failure" do
|
40
|
+
|
41
|
+
before(:each) do
|
42
|
+
@mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml'))
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be bounced" do
|
46
|
+
@mail.should_not be_bounced
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should say action 'delayed'" do
|
50
|
+
@mail.action.should == 'delayed'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should give a final recipient" do
|
54
|
+
@mail.final_recipient.should == 'RFC822; fraser@oooooooo.com.au'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should give an error code" do
|
58
|
+
@mail.error_status.should == '4.2.2'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should give a diagostic code" do
|
62
|
+
@mail.diagnostic_code.should == 'SMTP; 452 4.2.2 <fraser@oooooooo.com.au>... Mailbox full'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should give a remote-mta" do
|
66
|
+
@mail.remote_mta.should == 'DNS; mail.oooooooo.com.au'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be retryable" do
|
70
|
+
@mail.should be_retryable
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "permanent failure" do
|
75
|
+
|
76
|
+
before(:each) do
|
77
|
+
@mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_530.eml'))
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should be bounced" do
|
81
|
+
@mail.should be_bounced
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should say action 'failed'" do
|
85
|
+
@mail.action.should == 'failed'
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should give a final recipient" do
|
89
|
+
@mail.final_recipient.should == 'RFC822; edwin@zzzzzzz.com'
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should give an error code" do
|
93
|
+
@mail.error_status.should == '5.3.0'
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should give a diagostic code" do
|
97
|
+
@mail.diagnostic_code.should == 'SMTP; 553 5.3.0 <edwin@zzzzzzz.com>... Unknown E-Mail Address'
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should give a remote-mta" do
|
101
|
+
@mail.remote_mta.should == 'DNS; mail.zzzzzz.com'
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should be retryable" do
|
105
|
+
@mail.should_not be_retryable
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|