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,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "mail" do
|
5
|
+
|
6
|
+
it "should be able to be instantiated" do
|
7
|
+
doing { Mail }.should_not raise_error
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to make a new email" do
|
11
|
+
Mail.new.class.should == Mail::Message
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should accept headers and body" do
|
15
|
+
# Full tests in Message Spec
|
16
|
+
message = Mail.new do
|
17
|
+
from 'mikel@me.com'
|
18
|
+
to 'mikel@you.com'
|
19
|
+
subject 'Hello there Mikel'
|
20
|
+
body 'This is a body of text'
|
21
|
+
end
|
22
|
+
message.from.should == ['mikel@me.com']
|
23
|
+
message.to.should == ['mikel@you.com']
|
24
|
+
message.subject.should == 'Hello there Mikel'
|
25
|
+
message.body.to_s.should == 'This is a body of text'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should read a file" do
|
29
|
+
wrap_method = Mail.read(fixture('emails', 'plain_emails', 'raw_email.eml')).to_s
|
30
|
+
file_method = Mail.new(File.read(fixture('emails', 'plain_emails', 'raw_email.eml'))).to_s
|
31
|
+
wrap_method.should == file_method
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,1409 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Mail::Message do
|
5
|
+
|
6
|
+
def basic_email
|
7
|
+
"To: mikel\r\nFrom: bob\r\nSubject: Hello!\r\n\r\nemail message\r\n"
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "initialization" do
|
11
|
+
|
12
|
+
it "should instantiate empty" do
|
13
|
+
Mail::Message.new.class.should == Mail::Message
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should instantiate with a string" do
|
17
|
+
Mail::Message.new(basic_email).class.should == Mail::Message
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should allow us to pass it a block" do
|
21
|
+
mail = Mail::Message.new do
|
22
|
+
from 'mikel@me.com'
|
23
|
+
to 'lindsaar@you.com'
|
24
|
+
end
|
25
|
+
mail.from.should == ['mikel@me.com']
|
26
|
+
mail.to.should == ['lindsaar@you.com']
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should initialize a body and header class even if called with nothing to begin with" do
|
30
|
+
mail = Mail::Message.new
|
31
|
+
mail.header.class.should == Mail::Header
|
32
|
+
mail.body.class.should == Mail::Body
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not report basic emails as bounced" do
|
36
|
+
Mail::Message.new.should_not be_bounced
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be able to parse a basic email" do
|
40
|
+
doing { Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'basic_email.eml'))) }.should_not raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be able to parse an email with only blank lines as body" do
|
44
|
+
doing { Mail::Message.new(File.read(fixture('emails', 'error_emails', 'missing_body.eml'))) }.should_not raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be able to parse every email example we have without raising an exception" do
|
48
|
+
emails = Dir.glob( fixture('emails/**/*') ).delete_if { |f| File.directory?(f) }
|
49
|
+
STDERR.stub!(:puts) # Don't want to get noisy about any warnings
|
50
|
+
errors = false
|
51
|
+
emails.each do |email|
|
52
|
+
begin
|
53
|
+
Mail::Message.new(File.read(email))
|
54
|
+
rescue => e
|
55
|
+
puts "Failed on email #{email}"
|
56
|
+
puts "Failure was:\n#{e}"
|
57
|
+
errors = true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
errors.should be_false
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should not raise a warning on having non US-ASCII characters in the header (should just handle it)" do
|
64
|
+
STDERR.should_not_receive(:puts)
|
65
|
+
Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'raw_email_string_in_date_field.eml')))
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should raise a warning (and keep parsing) on having an incorrectly formatted header" do
|
69
|
+
STDERR.should_receive(:puts).with("WARNING: Could not parse (and so ignorning) 'quite Delivered-To: xxx@xxx.xxx'")
|
70
|
+
Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'raw_email_incorrect_header.eml')))
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should read in an email message and basically parse it" do
|
74
|
+
mail = Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'basic_email.eml')))
|
75
|
+
mail.to.should == ["raasdnil@gmail.com"]
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "envelope line handling" do
|
81
|
+
it "should respond to 'envelope from'" do
|
82
|
+
Mail::Message.new.should respond_to(:envelope_from)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should strip off the envelope from field if present" do
|
86
|
+
message = Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'raw_email.eml')))
|
87
|
+
message.envelope_from.should == "jamis_buck@byu.edu"
|
88
|
+
message.envelope_date.should == ::DateTime.parse("Mon May 2 16:07:05 2005")
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should strip off the envelope from field if present" do
|
92
|
+
message = Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'raw_email.eml')))
|
93
|
+
message.raw_envelope.should == "jamis_buck@byu.edu Mon May 2 16:07:05 2005"
|
94
|
+
message.from.should == ["jamis@37signals.com"]
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not cause any problems if there is no envelope from present" do
|
98
|
+
message = Mail::Message.new(File.read(fixture('emails', 'plain_emails', 'basic_email.eml')))
|
99
|
+
message.from.should == ["test@lindsaar.net"]
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should ignore a plain text body that starts with ^From" do
|
103
|
+
m = Mail::Message.new("From: mikel@test.lindsaar.net\r\n\r\nThis is a way to break mail by putting\r\nFrom at the start of a body\r\nor elsewhere.")
|
104
|
+
m.from.should_not be_nil
|
105
|
+
m.from.should == ['mikel@test.lindsaar.net']
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should handle a multipart message that has ^From in it" do
|
109
|
+
m = Mail::Message.new(File.read(fixture('emails', 'error_emails', 'cant_parse_from.eml')))
|
110
|
+
m.from.should_not be_nil
|
111
|
+
m.from.should == ["News@InsideApple.Apple.com"]
|
112
|
+
m.should be_multipart
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "accepting a plain text string email" do
|
118
|
+
|
119
|
+
it "should accept some email text to parse and return an email" do
|
120
|
+
mail = Mail::Message.new(basic_email)
|
121
|
+
mail.class.should == Mail::Message
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should set a raw source instance variable to equal the passed in message" do
|
125
|
+
mail = Mail::Message.new(basic_email)
|
126
|
+
mail.raw_source.should == basic_email.strip
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should set the raw source instance variable to '' if no message is passed in" do
|
130
|
+
mail = Mail::Message.new
|
131
|
+
mail.raw_source.should == ""
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should give the header class the header to parse" do
|
135
|
+
header = Mail::Header.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!")
|
136
|
+
Mail::Header.should_receive(:new).with("To: mikel\r\nFrom: bob\r\nSubject: Hello!", 'UTF-8').and_return(header)
|
137
|
+
mail = Mail::Message.new(basic_email)
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should give the header class the header to parse even if there is no body" do
|
141
|
+
header = Mail::Header.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!")
|
142
|
+
Mail::Header.should_receive(:new).with("To: mikel\r\nFrom: bob\r\nSubject: Hello!", 'UTF-8').and_return(header)
|
143
|
+
mail = Mail::Message.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!")
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should give the body class the body to parse" do
|
147
|
+
body = Mail::Body.new("email message")
|
148
|
+
Mail::Body.should_receive(:new).with("email message").and_return(body)
|
149
|
+
mail = Mail::Message.new(basic_email)
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should still ask the body for a new instance even though these is nothing to parse, yet" do
|
153
|
+
Mail::Body.should_receive(:new)
|
154
|
+
mail = Mail::Message.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!")
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should give the header the part before the line without spaces and the body the part without" do
|
158
|
+
header = Mail::Header.new("To: mikel")
|
159
|
+
body = Mail::Body.new("G'Day!")
|
160
|
+
Mail::Header.should_receive(:new).with("To: mikel", 'UTF-8').and_return(header)
|
161
|
+
Mail::Body.should_receive(:new).with("G'Day!").and_return(body)
|
162
|
+
mail = Mail::Message.new("To: mikel\r\n\r\nG'Day!")
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should give allow for whitespace on the gap line between header and body" do
|
166
|
+
header = Mail::Header.new("To: mikel")
|
167
|
+
body = Mail::Body.new("G'Day!")
|
168
|
+
Mail::Header.should_receive(:new).with("To: mikel", 'UTF-8').and_return(header)
|
169
|
+
Mail::Body.should_receive(:new).with("G'Day!").and_return(body)
|
170
|
+
mail = Mail::Message.new("To: mikel\r\n \r\nG'Day!")
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should allow for whitespace at the start of the email" do
|
174
|
+
mail = Mail.new("\r\n\r\nFrom: mikel\r\n\r\nThis is the body")
|
175
|
+
mail.from.should == ['mikel']
|
176
|
+
mail.body.to_s.should == 'This is the body'
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should read in an email message with the word 'From' in it multiple times and parse it" do
|
180
|
+
mail = Mail::Message.new(File.read(fixture('emails', 'mime_emails', 'two_from_in_message.eml')))
|
181
|
+
mail.to.should_not be_nil
|
182
|
+
mail.to.should == ["tester2@test.com"]
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "directly setting values of a message" do
|
188
|
+
|
189
|
+
describe "accessing fields directly" do
|
190
|
+
|
191
|
+
before(:each) do
|
192
|
+
@mail = Mail::Message.new
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should allow you to grab field objects if you really want to" do
|
196
|
+
@mail.header_fields.class.should == Mail::FieldList
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should give you back the fields in the header" do
|
200
|
+
@mail['bar'] = 'abcd'
|
201
|
+
@mail.header_fields.length.should == 1
|
202
|
+
@mail['foo'] = '4321'
|
203
|
+
@mail.header_fields.length.should == 2
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should delete a field if it is set to nil" do
|
207
|
+
@mail['foo'] = '4321'
|
208
|
+
@mail.header_fields.length.should == 1
|
209
|
+
@mail['foo'] = nil
|
210
|
+
@mail.header_fields.length.should == 0
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
|
215
|
+
describe "with :method=" do
|
216
|
+
|
217
|
+
before(:each) do
|
218
|
+
@mail = Mail::Message.new
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should return the to field" do
|
222
|
+
@mail.to = "mikel"
|
223
|
+
@mail.to.should == ["mikel"]
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should return the from field" do
|
227
|
+
@mail.from = "bob"
|
228
|
+
@mail.from.should == ["bob"]
|
229
|
+
end
|
230
|
+
|
231
|
+
it "should return the subject" do
|
232
|
+
@mail.subject = "Hello!"
|
233
|
+
@mail.subject.should == "Hello!"
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should return the body decoded with to_s" do
|
237
|
+
@mail.body "email message\r\n"
|
238
|
+
@mail.body.to_s.should == "email message\n"
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should return the body encoded if asked for" do
|
242
|
+
@mail.body "email message\r\n"
|
243
|
+
@mail.body.encoded.should == "email message\r\n"
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should return the body decoded if asked for" do
|
247
|
+
@mail.body "email message\r\n"
|
248
|
+
@mail.body.decoded.should == "email message\n"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
describe "with :method(value)" do
|
253
|
+
|
254
|
+
before(:each) do
|
255
|
+
@mail = Mail::Message.new
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should return the to field" do
|
259
|
+
@mail.to "mikel"
|
260
|
+
@mail.to.should == ["mikel"]
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should return the from field" do
|
264
|
+
@mail.from "bob"
|
265
|
+
@mail.from.should == ["bob"]
|
266
|
+
end
|
267
|
+
|
268
|
+
it "should return the subject" do
|
269
|
+
@mail.subject "Hello!"
|
270
|
+
@mail.subject.should == "Hello!"
|
271
|
+
end
|
272
|
+
|
273
|
+
it "should return the body decoded with to_s" do
|
274
|
+
@mail.body "email message\r\n"
|
275
|
+
@mail.body.to_s.should == "email message\n"
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should return the body encoded if asked for" do
|
279
|
+
@mail.body "email message\r\n"
|
280
|
+
@mail.body.encoded.should == "email message\r\n"
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should return the body decoded if asked for" do
|
284
|
+
@mail.body "email message\r\n"
|
285
|
+
@mail.body.decoded.should == "email message\n"
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
describe "setting arbitrary headers" do
|
290
|
+
|
291
|
+
before(:each) do
|
292
|
+
@mail = Mail::Message.new
|
293
|
+
end
|
294
|
+
|
295
|
+
it "should allow you to set them" do
|
296
|
+
doing {@mail['foo'] = 1234}.should_not raise_error
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should allow you to read arbitrary headers" do
|
300
|
+
@mail['foo'] = 1234
|
301
|
+
@mail['foo'].value.to_s.should == '1234'
|
302
|
+
end
|
303
|
+
|
304
|
+
it "should instantiate a new Header" do
|
305
|
+
@mail['foo'] = 1234
|
306
|
+
@mail.header_fields.first.class.should == Mail::Field
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
describe "replacing header values" do
|
311
|
+
|
312
|
+
it "should allow you to replace a from field" do
|
313
|
+
mail = Mail.new
|
314
|
+
mail.from.should == nil
|
315
|
+
mail.from = 'mikel@test.lindsaar.net'
|
316
|
+
mail.from.should == ['mikel@test.lindsaar.net']
|
317
|
+
mail.from = 'bob@test.lindsaar.net'
|
318
|
+
mail.from.should == ['bob@test.lindsaar.net']
|
319
|
+
end
|
320
|
+
|
321
|
+
it "should maintain the class of the field" do
|
322
|
+
mail = Mail.new
|
323
|
+
mail.from = 'mikel@test.lindsaar.net'
|
324
|
+
mail[:from].field.class.should == Mail::FromField
|
325
|
+
mail.from = 'bob@test.lindsaar.net'
|
326
|
+
mail[:from].field.class.should == Mail::FromField
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
describe "setting headers" do
|
331
|
+
|
332
|
+
it "should accept them in block form" do
|
333
|
+
message = Mail.new do
|
334
|
+
bcc 'mikel@bcc.lindsaar.net'
|
335
|
+
cc 'mikel@cc.lindsaar.net'
|
336
|
+
comments 'this is a comment'
|
337
|
+
date '12 Aug 2009 00:00:01 GMT'
|
338
|
+
from 'mikel@from.lindsaar.net'
|
339
|
+
in_reply_to '<1234@in_reply_to.lindsaar.net>'
|
340
|
+
keywords 'test, "of the new mail", system'
|
341
|
+
message_id '<1234@message_id.lindsaar.net>'
|
342
|
+
received 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT'
|
343
|
+
references '<1234@references.lindsaar.net>'
|
344
|
+
reply_to 'mikel@reply-to.lindsaar.net'
|
345
|
+
resent_bcc 'mikel@resent-bcc.lindsaar.net'
|
346
|
+
resent_cc 'mikel@resent-cc.lindsaar.net'
|
347
|
+
resent_date '12 Aug 2009 00:00:03 GMT'
|
348
|
+
resent_from 'mikel@resent-from.lindsaar.net'
|
349
|
+
resent_message_id '<1234@resent_message_id.lindsaar.net>'
|
350
|
+
resent_sender 'mikel@resent-sender.lindsaar.net'
|
351
|
+
resent_to 'mikel@resent-to.lindsaar.net'
|
352
|
+
sender 'mikel@sender.lindsaar.net'
|
353
|
+
subject 'Hello there Mikel'
|
354
|
+
to 'mikel@to.lindsaar.net'
|
355
|
+
content_type 'text/plain; charset=UTF-8'
|
356
|
+
content_transfer_encoding '7bit'
|
357
|
+
content_description 'This is a test'
|
358
|
+
content_disposition 'attachment; filename=File'
|
359
|
+
content_id '<1234@message_id.lindsaar.net>'
|
360
|
+
mime_version '1.0'
|
361
|
+
body 'This is a body of text'
|
362
|
+
end
|
363
|
+
|
364
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
365
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
366
|
+
message.comments.should == 'this is a comment'
|
367
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
368
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
369
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
370
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
371
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
372
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
373
|
+
message.references.should == '1234@references.lindsaar.net'
|
374
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
375
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
376
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
377
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
378
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
379
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
380
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
381
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
382
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
383
|
+
message.subject.should == 'Hello there Mikel'
|
384
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
385
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
386
|
+
message.content_transfer_encoding.should == '7bit'
|
387
|
+
message.content_description.should == 'This is a test'
|
388
|
+
message.content_disposition.should == 'attachment; filename=File'
|
389
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
390
|
+
message.mime_version.should == '1.0'
|
391
|
+
message.body.to_s.should == 'This is a body of text'
|
392
|
+
end
|
393
|
+
|
394
|
+
it "should accept them in assignment form" do
|
395
|
+
message = Mail.new
|
396
|
+
message.bcc = 'mikel@bcc.lindsaar.net'
|
397
|
+
message.cc = 'mikel@cc.lindsaar.net'
|
398
|
+
message.comments = 'this is a comment'
|
399
|
+
message.date = '12 Aug 2009 00:00:01 GMT'
|
400
|
+
message.from = 'mikel@from.lindsaar.net'
|
401
|
+
message.in_reply_to = '<1234@in_reply_to.lindsaar.net>'
|
402
|
+
message.keywords = 'test, "of the new mail", system'
|
403
|
+
message.message_id = '<1234@message_id.lindsaar.net>'
|
404
|
+
message.received = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT'
|
405
|
+
message.references = '<1234@references.lindsaar.net>'
|
406
|
+
message.reply_to = 'mikel@reply-to.lindsaar.net'
|
407
|
+
message.resent_bcc = 'mikel@resent-bcc.lindsaar.net'
|
408
|
+
message.resent_cc = 'mikel@resent-cc.lindsaar.net'
|
409
|
+
message.resent_date = '12 Aug 2009 00:00:03 GMT'
|
410
|
+
message.resent_from = 'mikel@resent-from.lindsaar.net'
|
411
|
+
message.resent_message_id = '<1234@resent_message_id.lindsaar.net>'
|
412
|
+
message.resent_sender = 'mikel@resent-sender.lindsaar.net'
|
413
|
+
message.resent_to = 'mikel@resent-to.lindsaar.net'
|
414
|
+
message.sender = 'mikel@sender.lindsaar.net'
|
415
|
+
message.subject = 'Hello there Mikel'
|
416
|
+
message.to = 'mikel@to.lindsaar.net'
|
417
|
+
message.content_type = 'text/plain; charset=UTF-8'
|
418
|
+
message.content_transfer_encoding = '7bit'
|
419
|
+
message.content_description = 'This is a test'
|
420
|
+
message.content_disposition = 'attachment; filename=File'
|
421
|
+
message.content_id = '<1234@message_id.lindsaar.net>'
|
422
|
+
message.mime_version = '1.0'
|
423
|
+
message.body = 'This is a body of text'
|
424
|
+
|
425
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
426
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
427
|
+
message.comments.should == 'this is a comment'
|
428
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
429
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
430
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
431
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
432
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
433
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
434
|
+
message.references.should == '1234@references.lindsaar.net'
|
435
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
436
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
437
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
438
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
439
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
440
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
441
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
442
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
443
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
444
|
+
message.subject.should == 'Hello there Mikel'
|
445
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
446
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
447
|
+
message.content_transfer_encoding.should == '7bit'
|
448
|
+
message.content_description.should == 'This is a test'
|
449
|
+
message.content_disposition.should == 'attachment; filename=File'
|
450
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
451
|
+
message.mime_version.should == '1.0'
|
452
|
+
message.body.to_s.should == 'This is a body of text'
|
453
|
+
end
|
454
|
+
|
455
|
+
it "should accept them in key, value form as symbols" do
|
456
|
+
message = Mail.new
|
457
|
+
message[:bcc] = 'mikel@bcc.lindsaar.net'
|
458
|
+
message[:cc] = 'mikel@cc.lindsaar.net'
|
459
|
+
message[:comments] = 'this is a comment'
|
460
|
+
message[:date] = '12 Aug 2009 00:00:01 GMT'
|
461
|
+
message[:from] = 'mikel@from.lindsaar.net'
|
462
|
+
message[:in_reply_to] = '<1234@in_reply_to.lindsaar.net>'
|
463
|
+
message[:keywords] = 'test, "of the new mail", system'
|
464
|
+
message[:message_id] = '<1234@message_id.lindsaar.net>'
|
465
|
+
message[:received] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT'
|
466
|
+
message[:references] = '<1234@references.lindsaar.net>'
|
467
|
+
message[:reply_to] = 'mikel@reply-to.lindsaar.net'
|
468
|
+
message[:resent_bcc] = 'mikel@resent-bcc.lindsaar.net'
|
469
|
+
message[:resent_cc] = 'mikel@resent-cc.lindsaar.net'
|
470
|
+
message[:resent_date] = '12 Aug 2009 00:00:03 GMT'
|
471
|
+
message[:resent_from] = 'mikel@resent-from.lindsaar.net'
|
472
|
+
message[:resent_message_id] = '<1234@resent_message_id.lindsaar.net>'
|
473
|
+
message[:resent_sender] = 'mikel@resent-sender.lindsaar.net'
|
474
|
+
message[:resent_to] = 'mikel@resent-to.lindsaar.net'
|
475
|
+
message[:sender] = 'mikel@sender.lindsaar.net'
|
476
|
+
message[:subject] = 'Hello there Mikel'
|
477
|
+
message[:to] = 'mikel@to.lindsaar.net'
|
478
|
+
message[:content_type] = 'text/plain; charset=UTF-8'
|
479
|
+
message[:content_transfer_encoding] = '7bit'
|
480
|
+
message[:content_description] = 'This is a test'
|
481
|
+
message[:content_disposition] = 'attachment; filename=File'
|
482
|
+
message[:content_id] = '<1234@message_id.lindsaar.net>'
|
483
|
+
message[:mime_version]= '1.0'
|
484
|
+
message[:body] = 'This is a body of text'
|
485
|
+
|
486
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
487
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
488
|
+
message.comments.should == 'this is a comment'
|
489
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
490
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
491
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
492
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
493
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
494
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
495
|
+
message.references.should == '1234@references.lindsaar.net'
|
496
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
497
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
498
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
499
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
500
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
501
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
502
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
503
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
504
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
505
|
+
message.subject.should == 'Hello there Mikel'
|
506
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
507
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
508
|
+
message.content_transfer_encoding.should == '7bit'
|
509
|
+
message.content_description.should == 'This is a test'
|
510
|
+
message.content_disposition.should == 'attachment; filename=File'
|
511
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
512
|
+
message.mime_version.should == '1.0'
|
513
|
+
message.body.to_s.should == 'This is a body of text'
|
514
|
+
end
|
515
|
+
|
516
|
+
it "should accept them in key, value form as strings" do
|
517
|
+
message = Mail.new
|
518
|
+
message['bcc'] = 'mikel@bcc.lindsaar.net'
|
519
|
+
message['cc'] = 'mikel@cc.lindsaar.net'
|
520
|
+
message['comments'] = 'this is a comment'
|
521
|
+
message['date'] = '12 Aug 2009 00:00:01 GMT'
|
522
|
+
message['from'] = 'mikel@from.lindsaar.net'
|
523
|
+
message['in_reply_to'] = '<1234@in_reply_to.lindsaar.net>'
|
524
|
+
message['keywords'] = 'test, "of the new mail", system'
|
525
|
+
message['message_id'] = '<1234@message_id.lindsaar.net>'
|
526
|
+
message['received'] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT'
|
527
|
+
message['references'] = '<1234@references.lindsaar.net>'
|
528
|
+
message['reply_to'] = 'mikel@reply-to.lindsaar.net'
|
529
|
+
message['resent_bcc'] = 'mikel@resent-bcc.lindsaar.net'
|
530
|
+
message['resent_cc'] = 'mikel@resent-cc.lindsaar.net'
|
531
|
+
message['resent_date'] = '12 Aug 2009 00:00:03 GMT'
|
532
|
+
message['resent_from'] = 'mikel@resent-from.lindsaar.net'
|
533
|
+
message['resent_message_id'] = '<1234@resent_message_id.lindsaar.net>'
|
534
|
+
message['resent_sender'] = 'mikel@resent-sender.lindsaar.net'
|
535
|
+
message['resent_to'] = 'mikel@resent-to.lindsaar.net'
|
536
|
+
message['sender'] = 'mikel@sender.lindsaar.net'
|
537
|
+
message['subject'] = 'Hello there Mikel'
|
538
|
+
message['to'] = 'mikel@to.lindsaar.net'
|
539
|
+
message['content_type'] = 'text/plain; charset=UTF-8'
|
540
|
+
message['content_transfer_encoding'] = '7bit'
|
541
|
+
message['content_description'] = 'This is a test'
|
542
|
+
message['content_disposition'] = 'attachment; filename=File'
|
543
|
+
message['content_id'] = '<1234@message_id.lindsaar.net>'
|
544
|
+
message['mime_version'] = '1.0'
|
545
|
+
message['body'] = 'This is a body of text'
|
546
|
+
|
547
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
548
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
549
|
+
message.comments.should == 'this is a comment'
|
550
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
551
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
552
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
553
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
554
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
555
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
556
|
+
message.references.should == '1234@references.lindsaar.net'
|
557
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
558
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
559
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
560
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
561
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
562
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
563
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
564
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
565
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
566
|
+
message.subject.should == 'Hello there Mikel'
|
567
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
568
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
569
|
+
message.content_transfer_encoding.should == '7bit'
|
570
|
+
message.content_description.should == 'This is a test'
|
571
|
+
message.content_disposition.should == 'attachment; filename=File'
|
572
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
573
|
+
message.mime_version.should == '1.0'
|
574
|
+
message.body.to_s.should == 'This is a body of text'
|
575
|
+
end
|
576
|
+
|
577
|
+
it "should accept them as a hash with symbols" do
|
578
|
+
message = Mail.new({
|
579
|
+
:bcc => 'mikel@bcc.lindsaar.net',
|
580
|
+
:cc => 'mikel@cc.lindsaar.net',
|
581
|
+
:comments => 'this is a comment',
|
582
|
+
:date => '12 Aug 2009 00:00:01 GMT',
|
583
|
+
:from => 'mikel@from.lindsaar.net',
|
584
|
+
:in_reply_to => '<1234@in_reply_to.lindsaar.net>',
|
585
|
+
:keywords => 'test, "of the new mail", system',
|
586
|
+
:message_id => '<1234@message_id.lindsaar.net>',
|
587
|
+
:received => 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT',
|
588
|
+
:references => '<1234@references.lindsaar.net>',
|
589
|
+
:reply_to => 'mikel@reply-to.lindsaar.net',
|
590
|
+
:resent_bcc => 'mikel@resent-bcc.lindsaar.net',
|
591
|
+
:resent_cc => 'mikel@resent-cc.lindsaar.net',
|
592
|
+
:resent_date => '12 Aug 2009 00:00:03 GMT',
|
593
|
+
:resent_from => 'mikel@resent-from.lindsaar.net',
|
594
|
+
:resent_message_id => '<1234@resent_message_id.lindsaar.net>',
|
595
|
+
:resent_sender => 'mikel@resent-sender.lindsaar.net',
|
596
|
+
:resent_to => 'mikel@resent-to.lindsaar.net',
|
597
|
+
:sender => 'mikel@sender.lindsaar.net',
|
598
|
+
:subject => 'Hello there Mikel',
|
599
|
+
:to => 'mikel@to.lindsaar.net',
|
600
|
+
:content_type => 'text/plain; charset=UTF-8',
|
601
|
+
:content_transfer_encoding => '7bit',
|
602
|
+
:content_description => 'This is a test',
|
603
|
+
:content_disposition => 'attachment; filename=File',
|
604
|
+
:content_id => '<1234@message_id.lindsaar.net>',
|
605
|
+
:mime_version => '1.0',
|
606
|
+
:body => 'This is a body of text'
|
607
|
+
})
|
608
|
+
|
609
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
610
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
611
|
+
message.comments.should == 'this is a comment'
|
612
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
613
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
614
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
615
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
616
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
617
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
618
|
+
message.references.should == '1234@references.lindsaar.net'
|
619
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
620
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
621
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
622
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
623
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
624
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
625
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
626
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
627
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
628
|
+
message.subject.should == 'Hello there Mikel'
|
629
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
630
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
631
|
+
message.content_transfer_encoding.should == '7bit'
|
632
|
+
message.content_description.should == 'This is a test'
|
633
|
+
message.content_disposition.should == 'attachment; filename=File'
|
634
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
635
|
+
message.mime_version.should == '1.0'
|
636
|
+
message.body.to_s.should == 'This is a body of text'
|
637
|
+
end
|
638
|
+
|
639
|
+
it "should accept them as a hash with strings" do
|
640
|
+
message = Mail.new({
|
641
|
+
'bcc' => 'mikel@bcc.lindsaar.net',
|
642
|
+
'cc' => 'mikel@cc.lindsaar.net',
|
643
|
+
'comments' => 'this is a comment',
|
644
|
+
'date' => '12 Aug 2009 00:00:01 GMT',
|
645
|
+
'from' => 'mikel@from.lindsaar.net',
|
646
|
+
'in_reply_to' => '<1234@in_reply_to.lindsaar.net>',
|
647
|
+
'keywords' => 'test, "of the new mail", system',
|
648
|
+
'message_id' => '<1234@message_id.lindsaar.net>',
|
649
|
+
'received' => 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT',
|
650
|
+
'references' => '<1234@references.lindsaar.net>',
|
651
|
+
'reply_to' => 'mikel@reply-to.lindsaar.net',
|
652
|
+
'resent_bcc' => 'mikel@resent-bcc.lindsaar.net',
|
653
|
+
'resent_cc' => 'mikel@resent-cc.lindsaar.net',
|
654
|
+
'resent_date' => '12 Aug 2009 00:00:03 GMT',
|
655
|
+
'resent_from' => 'mikel@resent-from.lindsaar.net',
|
656
|
+
'resent_message_id' => '<1234@resent_message_id.lindsaar.net>',
|
657
|
+
'resent_sender' => 'mikel@resent-sender.lindsaar.net',
|
658
|
+
'resent_to' => 'mikel@resent-to.lindsaar.net',
|
659
|
+
'sender' => 'mikel@sender.lindsaar.net',
|
660
|
+
'subject' => 'Hello there Mikel',
|
661
|
+
'to' => 'mikel@to.lindsaar.net',
|
662
|
+
'content_type' => 'text/plain; charset=UTF-8',
|
663
|
+
'content_transfer_encoding' => '7bit',
|
664
|
+
'content_description' => 'This is a test',
|
665
|
+
'content_disposition' => 'attachment; filename=File',
|
666
|
+
'content_id' => '<1234@message_id.lindsaar.net>',
|
667
|
+
'mime_version' => '1.0',
|
668
|
+
'body' => 'This is a body of text'
|
669
|
+
})
|
670
|
+
|
671
|
+
message.bcc.should == ['mikel@bcc.lindsaar.net']
|
672
|
+
message.cc.should == ['mikel@cc.lindsaar.net']
|
673
|
+
message.comments.should == 'this is a comment'
|
674
|
+
message.date.should == DateTime.parse('12 Aug 2009 00:00:01 GMT')
|
675
|
+
message.from.should == ['mikel@from.lindsaar.net']
|
676
|
+
message.in_reply_to.should == '1234@in_reply_to.lindsaar.net'
|
677
|
+
message.keywords.should == ["test", "of the new mail", "system"]
|
678
|
+
message.message_id.should == '1234@message_id.lindsaar.net'
|
679
|
+
message.received.date_time.should == DateTime.parse('12 Aug 2009 00:00:02 GMT')
|
680
|
+
message.references.should == '1234@references.lindsaar.net'
|
681
|
+
message.reply_to.should == ['mikel@reply-to.lindsaar.net']
|
682
|
+
message.resent_bcc.should == ['mikel@resent-bcc.lindsaar.net']
|
683
|
+
message.resent_cc.should == ['mikel@resent-cc.lindsaar.net']
|
684
|
+
message.resent_date.should == DateTime.parse('12 Aug 2009 00:00:03 GMT')
|
685
|
+
message.resent_from.should == ['mikel@resent-from.lindsaar.net']
|
686
|
+
message.resent_message_id.should == '1234@resent_message_id.lindsaar.net'
|
687
|
+
message.resent_sender.should == ['mikel@resent-sender.lindsaar.net']
|
688
|
+
message.resent_to.should == ['mikel@resent-to.lindsaar.net']
|
689
|
+
message.sender.should == 'mikel@sender.lindsaar.net'
|
690
|
+
message.subject.should == 'Hello there Mikel'
|
691
|
+
message.to.should == ['mikel@to.lindsaar.net']
|
692
|
+
message.content_type.should == 'text/plain; charset=UTF-8'
|
693
|
+
message.content_transfer_encoding.should == '7bit'
|
694
|
+
message.content_description.should == 'This is a test'
|
695
|
+
message.content_disposition.should == 'attachment; filename=File'
|
696
|
+
message.content_id.should == '<1234@message_id.lindsaar.net>'
|
697
|
+
message.mime_version.should == '1.0'
|
698
|
+
message.body.to_s.should == 'This is a body of text'
|
699
|
+
end
|
700
|
+
|
701
|
+
it "should let you set custom headers with a :headers => {hash}" do
|
702
|
+
message = Mail.new(:headers => {'custom-header' => 'mikel'})
|
703
|
+
message['custom-header'].decoded.should == 'mikel'
|
704
|
+
end
|
705
|
+
|
706
|
+
it "should assign the body to a part on creation" do
|
707
|
+
message = Mail.new do
|
708
|
+
part({:content_type=>"multipart/alternative", :content_disposition=>"inline", :body=>"Nothing to see here."})
|
709
|
+
end
|
710
|
+
message.parts.first.body.decoded.should == "Nothing to see here."
|
711
|
+
end
|
712
|
+
|
713
|
+
it "should not overwrite bodies on creation" do
|
714
|
+
message = Mail.new do
|
715
|
+
part({:content_type=>"multipart/alternative", :content_disposition=>"inline", :body=>"Nothing to see here."}) do |p|
|
716
|
+
p.part :content_type => "text/html", :body => "<b>test</b> HTML<br/>"
|
717
|
+
end
|
718
|
+
end
|
719
|
+
message.parts.first.parts[0].body.decoded.should == "Nothing to see here."
|
720
|
+
message.parts.first.parts[1].body.decoded.should == "<b>test</b> HTML<br/>"
|
721
|
+
message.encoded.should match %r{Nothing to see here\.}
|
722
|
+
message.encoded.should match %r{<b>test</b> HTML<br/>}
|
723
|
+
end
|
724
|
+
|
725
|
+
it "should allow you to init on an array of addresses from a hash" do
|
726
|
+
mail = Mail.new(:to => ['test1@lindsaar.net', 'Mikel <test2@lindsaar.net>'])
|
727
|
+
mail.to.should == ['test1@lindsaar.net', 'test2@lindsaar.net']
|
728
|
+
end
|
729
|
+
|
730
|
+
it "should allow you to init on an array of addresses directly" do
|
731
|
+
mail = Mail.new
|
732
|
+
mail.to = ['test1@lindsaar.net', 'Mikel <test2@lindsaar.net>']
|
733
|
+
mail.to.should == ['test1@lindsaar.net', 'test2@lindsaar.net']
|
734
|
+
end
|
735
|
+
|
736
|
+
it "should allow you to init on an array of addresses directly" do
|
737
|
+
mail = Mail.new
|
738
|
+
mail[:to] = ['test1@lindsaar.net', 'Mikel <test2@lindsaar.net>']
|
739
|
+
mail.to.should == ['test1@lindsaar.net', 'test2@lindsaar.net']
|
740
|
+
end
|
741
|
+
|
742
|
+
end
|
743
|
+
|
744
|
+
end
|
745
|
+
|
746
|
+
describe "handling missing required fields:" do
|
747
|
+
|
748
|
+
describe "every email" do
|
749
|
+
|
750
|
+
describe "Message-ID" do
|
751
|
+
it "should say if it has a message id" do
|
752
|
+
mail = Mail.new do
|
753
|
+
from 'mikel@test.lindsaar.net'
|
754
|
+
to 'you@test.lindsaar.net'
|
755
|
+
subject 'This is a test email'
|
756
|
+
body 'This is a body of the email'
|
757
|
+
end
|
758
|
+
mail.should_not be_has_message_id
|
759
|
+
end
|
760
|
+
|
761
|
+
it "should preserve any message id that you pass it if add_message_id is called explicitly" do
|
762
|
+
mail = Mail.new do
|
763
|
+
from 'mikel@test.lindsaar.net'
|
764
|
+
to 'you@test.lindsaar.net'
|
765
|
+
subject 'This is a test email'
|
766
|
+
body 'This is a body of the email'
|
767
|
+
end
|
768
|
+
mail.add_message_id("<ThisIsANonUniqueMessageId@me.com>")
|
769
|
+
mail.to_s.should =~ /Message-ID: <ThisIsANonUniqueMessageId@me.com>\r\n/
|
770
|
+
end
|
771
|
+
|
772
|
+
it "should generate a random message ID if nothing is passed to add_message_id" do
|
773
|
+
mail = Mail.new do
|
774
|
+
from 'mikel@test.lindsaar.net'
|
775
|
+
to 'you@test.lindsaar.net'
|
776
|
+
subject 'This is a test email'
|
777
|
+
body 'This is a body of the email'
|
778
|
+
end
|
779
|
+
mail.add_message_id
|
780
|
+
fqdn ||= ::Socket.gethostname
|
781
|
+
mail.to_s.should =~ /Message-ID: <[\d\w_]+@#{fqdn}.mail>\r\n/
|
782
|
+
end
|
783
|
+
|
784
|
+
it "should make an email and inject a message ID if none was set if told to_s" do
|
785
|
+
mail = Mail.new do
|
786
|
+
from 'mikel@test.lindsaar.net'
|
787
|
+
to 'you@test.lindsaar.net'
|
788
|
+
subject 'This is a test email'
|
789
|
+
body 'This is a body of the email'
|
790
|
+
end
|
791
|
+
(mail.to_s =~ /Message-ID: <.+@.+.mail>/i).should_not be_nil
|
792
|
+
end
|
793
|
+
|
794
|
+
it "should add the message id to the message permanently once sent to_s" do
|
795
|
+
mail = Mail.new do
|
796
|
+
from 'mikel@test.lindsaar.net'
|
797
|
+
to 'you@test.lindsaar.net'
|
798
|
+
subject 'This is a test email'
|
799
|
+
body 'This is a body of the email'
|
800
|
+
end
|
801
|
+
mail.to_s
|
802
|
+
mail.should be_has_message_id
|
803
|
+
end
|
804
|
+
|
805
|
+
it "should add a body part if it is missing" do
|
806
|
+
mail = Mail.new
|
807
|
+
mail.to_s
|
808
|
+
mail.body.class.should == Mail::Body
|
809
|
+
end
|
810
|
+
end
|
811
|
+
|
812
|
+
describe "Date" do
|
813
|
+
it "should say if it has a date" do
|
814
|
+
mail = Mail.new do
|
815
|
+
from 'mikel@test.lindsaar.net'
|
816
|
+
to 'you@test.lindsaar.net'
|
817
|
+
subject 'This is a test email'
|
818
|
+
body 'This is a body of the email'
|
819
|
+
end
|
820
|
+
mail.should_not be_has_date
|
821
|
+
end
|
822
|
+
|
823
|
+
it "should preserve any date that you pass it if add_date is called explicitly" do
|
824
|
+
mail = Mail.new do
|
825
|
+
from 'mikel@test.lindsaar.net'
|
826
|
+
to 'you@test.lindsaar.net'
|
827
|
+
subject 'This is a test email'
|
828
|
+
body 'This is a body of the email'
|
829
|
+
end
|
830
|
+
mail.add_date("Mon, 24 Nov 1997 14:22:01 -0800")
|
831
|
+
mail.to_s.should =~ /Date: Mon, 24 Nov 1997 14:22:01 -0800/
|
832
|
+
end
|
833
|
+
|
834
|
+
it "should generate a current date if nothing is passed to add_date" do
|
835
|
+
mail = Mail.new do
|
836
|
+
from 'mikel@test.lindsaar.net'
|
837
|
+
to 'you@test.lindsaar.net'
|
838
|
+
subject 'This is a test email'
|
839
|
+
body 'This is a body of the email'
|
840
|
+
end
|
841
|
+
mail.add_date
|
842
|
+
mail.to_s.should =~ /Date: \w{3}, [\s\d]\d \w{3} \d{4} \d{2}:\d{2}:\d{2} [-+]?\d{4}\r\n/
|
843
|
+
end
|
844
|
+
|
845
|
+
it "should make an email and inject a date if none was set if told to_s" do
|
846
|
+
mail = Mail.new do
|
847
|
+
from 'mikel@test.lindsaar.net'
|
848
|
+
to 'you@test.lindsaar.net'
|
849
|
+
subject 'This is a test email'
|
850
|
+
body 'This is a body of the email'
|
851
|
+
end
|
852
|
+
mail.to_s.should =~ /Date: \w{3}, [\s\d]\d \w{3} \d{4} \d{2}:\d{2}:\d{2} [-+]?\d{4}\r\n/
|
853
|
+
end
|
854
|
+
|
855
|
+
it "should add the date to the message permanently once sent to_s" do
|
856
|
+
mail = Mail.new do
|
857
|
+
from 'mikel@test.lindsaar.net'
|
858
|
+
to 'you@test.lindsaar.net'
|
859
|
+
subject 'This is a test email'
|
860
|
+
body 'This is a body of the email'
|
861
|
+
end
|
862
|
+
mail.to_s
|
863
|
+
mail.should be_has_date
|
864
|
+
end
|
865
|
+
end
|
866
|
+
|
867
|
+
end
|
868
|
+
|
869
|
+
describe "mime emails" do
|
870
|
+
|
871
|
+
describe "mime-version" do
|
872
|
+
it "should say if it has a mime-version" do
|
873
|
+
mail = Mail.new do
|
874
|
+
from 'mikel@test.lindsaar.net'
|
875
|
+
to 'you@test.lindsaar.net'
|
876
|
+
subject 'This is a test email'
|
877
|
+
body 'This is a body of the email'
|
878
|
+
end
|
879
|
+
mail.should_not be_has_mime_version
|
880
|
+
end
|
881
|
+
|
882
|
+
it "should preserve any mime version that you pass it if add_mime_version is called explicitly" do
|
883
|
+
mail = Mail.new do
|
884
|
+
from 'mikel@test.lindsaar.net'
|
885
|
+
to 'you@test.lindsaar.net'
|
886
|
+
subject 'This is a test email'
|
887
|
+
body 'This is a body of the email'
|
888
|
+
end
|
889
|
+
mail.add_mime_version("3.0 (This is an unreal version number)")
|
890
|
+
mail.to_s.should =~ /Mime-Version: 3.0\r\n/
|
891
|
+
end
|
892
|
+
|
893
|
+
it "should generate a mime version if nothing is passed to add_date" do
|
894
|
+
mail = Mail.new do
|
895
|
+
from 'mikel@test.lindsaar.net'
|
896
|
+
to 'you@test.lindsaar.net'
|
897
|
+
subject 'This is a test email'
|
898
|
+
body 'This is a body of the email'
|
899
|
+
end
|
900
|
+
mail.add_mime_version
|
901
|
+
mail.to_s.should =~ /Mime-Version: 1.0\r\n/
|
902
|
+
end
|
903
|
+
|
904
|
+
it "should make an email and inject a mime_version if none was set if told to_s" do
|
905
|
+
mail = Mail.new do
|
906
|
+
from 'mikel@test.lindsaar.net'
|
907
|
+
to 'you@test.lindsaar.net'
|
908
|
+
subject 'This is a test email'
|
909
|
+
body 'This is a body of the email'
|
910
|
+
end
|
911
|
+
mail.to_s.should =~ /Mime-Version: 1.0\r\n/
|
912
|
+
end
|
913
|
+
|
914
|
+
it "should add the mime version to the message permanently once sent to_s" do
|
915
|
+
mail = Mail.new do
|
916
|
+
from 'mikel@test.lindsaar.net'
|
917
|
+
to 'you@test.lindsaar.net'
|
918
|
+
subject 'This is a test email'
|
919
|
+
body 'This is a body of the email'
|
920
|
+
end
|
921
|
+
mail.to_s
|
922
|
+
mail.should be_has_mime_version
|
923
|
+
end
|
924
|
+
end
|
925
|
+
|
926
|
+
describe "content type" do
|
927
|
+
|
928
|
+
it "should say if it has a content type" do
|
929
|
+
mail = Mail.new('Content-Type: text/plain')
|
930
|
+
mail.should be_has_content_type
|
931
|
+
end
|
932
|
+
|
933
|
+
it "should say if it does not have a content type" do
|
934
|
+
mail = Mail.new
|
935
|
+
mail.should_not be_has_content_type
|
936
|
+
end
|
937
|
+
|
938
|
+
it "should say if it has a charset" do
|
939
|
+
mail = Mail.new('Content-Type: text/plain; charset=US-ASCII')
|
940
|
+
mail.should be_has_charset
|
941
|
+
end
|
942
|
+
|
943
|
+
it "should say if it has a charset" do
|
944
|
+
mail = Mail.new('Content-Type: text/plain')
|
945
|
+
mail.should_not be_has_charset
|
946
|
+
end
|
947
|
+
|
948
|
+
it "should not raise a warning if there is no charset defined and only US-ASCII chars" do
|
949
|
+
body = "This is plain text US-ASCII"
|
950
|
+
mail = Mail.new
|
951
|
+
mail.body = body
|
952
|
+
STDERR.should_not_receive(:puts)
|
953
|
+
mail.to_s
|
954
|
+
end
|
955
|
+
|
956
|
+
it "should set the content type to text/plain; charset=us-ascii" do
|
957
|
+
body = "This is plain text US-ASCII"
|
958
|
+
mail = Mail.new
|
959
|
+
mail.body = body
|
960
|
+
mail.to_s =~ %r{Content-Type: text/plain; charset=US-ASCII}
|
961
|
+
end
|
962
|
+
|
963
|
+
it "should not set the charset if the file is an attachment" do
|
964
|
+
body = "This is plain text US-ASCII"
|
965
|
+
mail = Mail.new
|
966
|
+
mail.body = body
|
967
|
+
mail.content_disposition = 'attachment; filename="foo.jpg"'
|
968
|
+
mail.to_s =~ %r{Content-Type: text/plain;\r\n}
|
969
|
+
end
|
970
|
+
|
971
|
+
it "should raise a warning if there is no content type and there is non ascii chars and default to text/plain, UTF-8" do
|
972
|
+
body = "This is NOT plain text ASCII − かきくけこ"
|
973
|
+
mail = Mail.new
|
974
|
+
mail.body = body
|
975
|
+
mail.content_transfer_encoding = "8bit"
|
976
|
+
STDERR.should_receive(:puts).with(/Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect./m)
|
977
|
+
mail.to_s =~ %r{Content-Type: text/plain; charset=UTF-8}
|
978
|
+
end
|
979
|
+
|
980
|
+
it "should raise a warning if there is no charset parameter and there is non ascii chars and default to text/plain, UTF-8" do
|
981
|
+
body = "This is NOT plain text ASCII − かきくけこ"
|
982
|
+
mail = Mail.new
|
983
|
+
mail.body = body
|
984
|
+
mail.content_type = "text/plain"
|
985
|
+
mail.content_transfer_encoding = "8bit"
|
986
|
+
STDERR.should_receive(:puts).with(/Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect./m)
|
987
|
+
mail.to_s =~ %r{Content-Type: text/plain; charset=UTF-8}
|
988
|
+
end
|
989
|
+
|
990
|
+
it "should not raise a warning if there is a charset defined and there is non ascii chars" do
|
991
|
+
body = "This is NOT plain text ASCII − かきくけこ"
|
992
|
+
mail = Mail.new
|
993
|
+
mail.body = body
|
994
|
+
mail.content_transfer_encoding = "8bit"
|
995
|
+
mail.content_type = "text/plain; charset=UTF-8"
|
996
|
+
STDERR.should_not_receive(:puts)
|
997
|
+
mail.to_s
|
998
|
+
end
|
999
|
+
|
1000
|
+
it "should be able to set a content type with an array and hash" do
|
1001
|
+
mail = Mail.new
|
1002
|
+
mail.content_type = ["text", "plain", { "charset" => 'US-ASCII' }]
|
1003
|
+
mail[:content_type].encoded.should == %Q[Content-Type: text/plain;\r\n\tcharset=US-ASCII\r\n]
|
1004
|
+
mail.content_type_parameters.should == {"charset" => "US-ASCII"}
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
it "should be able to set a content type with an array and hash with a non-usascii field" do
|
1008
|
+
mail = Mail.new
|
1009
|
+
mail.content_type = ["text", "plain", { "charset" => 'UTF-8' }]
|
1010
|
+
mail[:content_type].encoded.should == %Q[Content-Type: text/plain;\r\n\tcharset=UTF-8\r\n]
|
1011
|
+
mail.content_type_parameters.should == {"charset" => "UTF-8"}
|
1012
|
+
end
|
1013
|
+
|
1014
|
+
it "should allow us to specify a content type in a block" do
|
1015
|
+
mail = Mail.new { content_type ["text", "plain", { "charset" => "UTF-8" }] }
|
1016
|
+
mail.content_type_parameters.should == {"charset" => "UTF-8"}
|
1017
|
+
end
|
1018
|
+
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
describe "content-transfer-encoding" do
|
1022
|
+
|
1023
|
+
it "should use 7bit for only US-ASCII chars" do
|
1024
|
+
body = "This is plain text US-ASCII"
|
1025
|
+
mail = Mail.new
|
1026
|
+
mail.body = body
|
1027
|
+
mail.to_s.should =~ %r{Content-Transfer-Encoding: 7bit}
|
1028
|
+
end
|
1029
|
+
|
1030
|
+
it "should use QP transfer encoding for 8bit text with only a few 8bit characters" do
|
1031
|
+
body = "Maxfeldstraße 5, 90409 Nürnberg"
|
1032
|
+
mail = Mail.new
|
1033
|
+
mail.charset = "UTF-8"
|
1034
|
+
mail.body = body
|
1035
|
+
mail.to_s.should =~ %r{Content-Transfer-Encoding: quoted-printable}
|
1036
|
+
end
|
1037
|
+
|
1038
|
+
it "should use base64 transfer encoding for 8-bit text with lots of 8bit characters" do
|
1039
|
+
body = "This is NOT plain text ASCII − かきくけこ"
|
1040
|
+
mail = Mail.new
|
1041
|
+
mail.charset = "UTF-8"
|
1042
|
+
mail.body = body
|
1043
|
+
mail.content_type = "text/plain; charset=utf-8"
|
1044
|
+
mail.should be_has_content_type
|
1045
|
+
mail.should be_has_charset
|
1046
|
+
mail.to_s.should =~ %r{Content-Transfer-Encoding: base64}
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
it "should not use 8bit transfer encoding when 8bit is allowed" do
|
1050
|
+
body = "This is NOT plain text ASCII − かきくけこ"
|
1051
|
+
mail = Mail.new
|
1052
|
+
mail.charset = "UTF-8"
|
1053
|
+
mail.body = body
|
1054
|
+
mail.content_type = "text/plain; charset=utf-8"
|
1055
|
+
mail.transport_encoding = "8bit"
|
1056
|
+
mail.to_s.should =~ %r{Content-Transfer-Encoding: 8bit}
|
1057
|
+
end
|
1058
|
+
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
describe "output" do
|
1066
|
+
|
1067
|
+
it "should make an email and allow you to call :to_s on it to get a string" do
|
1068
|
+
mail = Mail.new do
|
1069
|
+
from 'mikel@test.lindsaar.net'
|
1070
|
+
to 'you@test.lindsaar.net'
|
1071
|
+
subject 'This is a test email'
|
1072
|
+
body 'This is a body of the email'
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
mail.to_s.should =~ /From: mikel@test.lindsaar.net\r\n/
|
1076
|
+
mail.to_s.should =~ /To: you@test.lindsaar.net\r\n/
|
1077
|
+
mail.to_s.should =~ /Subject: This is a test email\r\n/
|
1078
|
+
mail.to_s.should =~ /This is a body of the email/
|
1079
|
+
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
it "should raise an error and message if you try and call decoded on a multipart email" do
|
1083
|
+
mail = Mail.new do
|
1084
|
+
to 'mikel@test.lindsaar.net'
|
1085
|
+
from 'bob@test.lindsaar.net'
|
1086
|
+
subject 'Multipart email'
|
1087
|
+
text_part do
|
1088
|
+
body 'This is plain text'
|
1089
|
+
end
|
1090
|
+
html_part do
|
1091
|
+
content_type 'text/html; charset=UTF-8'
|
1092
|
+
body '<h1>This is HTML</h1>'
|
1093
|
+
end
|
1094
|
+
end
|
1095
|
+
doing { mail.decoded }.should raise_error(NoMethodError, 'Can not decode an entire message, try calling #decoded on the various fields and body or parts if it is a multipart message.')
|
1096
|
+
end
|
1097
|
+
|
1098
|
+
it "should return the decoded body if you call decode and the message is not multipart" do
|
1099
|
+
mail = Mail.new do
|
1100
|
+
content_transfer_encoding 'base64'
|
1101
|
+
body "VGhlIGJvZHk=\n"
|
1102
|
+
end
|
1103
|
+
mail.decoded.should == "The body"
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
describe "decoding bodies" do
|
1107
|
+
|
1108
|
+
it "should not change a body on decode if not given an encoding type to decode" do
|
1109
|
+
mail = Mail.new do
|
1110
|
+
body "The=3Dbody"
|
1111
|
+
end
|
1112
|
+
mail.body.decoded.should == "The=3Dbody"
|
1113
|
+
mail.body.encoded.should == "The=3Dbody"
|
1114
|
+
end
|
1115
|
+
|
1116
|
+
it "should change a body on decode if given an encoding type to decode" do
|
1117
|
+
mail = Mail.new do
|
1118
|
+
content_transfer_encoding 'quoted-printable'
|
1119
|
+
body "The=3Dbody"
|
1120
|
+
end
|
1121
|
+
mail.body.decoded.should == "The=body"
|
1122
|
+
mail.body.encoded.should == "The=3Dbody=\r\n"
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
it "should change a body on decode if given an encoding type to decode" do
|
1126
|
+
mail = Mail.new do
|
1127
|
+
content_transfer_encoding 'base64'
|
1128
|
+
body "VGhlIGJvZHk=\n"
|
1129
|
+
end
|
1130
|
+
mail.body.decoded.should == "The body"
|
1131
|
+
mail.body.encoded.should == "VGhlIGJvZHk=\r\n"
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
end
|
1135
|
+
|
1136
|
+
end
|
1137
|
+
|
1138
|
+
describe "helper methods" do
|
1139
|
+
|
1140
|
+
describe "==" do
|
1141
|
+
it "should be implemented" do
|
1142
|
+
doing { Mail.new == Mail.new }.should_not raise_error
|
1143
|
+
end
|
1144
|
+
|
1145
|
+
it "should ignore the message id value if both have a nil message id" do
|
1146
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1147
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1148
|
+
m1.should == m2
|
1149
|
+
end
|
1150
|
+
|
1151
|
+
it "should ignore the message id value if self has a nil message id" do
|
1152
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1153
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1154
|
+
m1.should == m2
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
it "should ignore the message id value if other has a nil message id" do
|
1158
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1159
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1160
|
+
m1.should == m2
|
1161
|
+
end
|
1162
|
+
|
1163
|
+
it "should not be == if both emails have different Message IDs" do
|
1164
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <4321@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1165
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1166
|
+
m1.should_not == m2
|
1167
|
+
end
|
1168
|
+
|
1169
|
+
it "should preserve the message id of self if set" do
|
1170
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1171
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1172
|
+
m1 == m2
|
1173
|
+
m1.message_id.should == '1234@test.lindsaar.net'
|
1174
|
+
end
|
1175
|
+
|
1176
|
+
it "should preserve the message id of other if set" do
|
1177
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there")
|
1178
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1179
|
+
m1 == m2
|
1180
|
+
m2.message_id.should == '1234@test.lindsaar.net'
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
it "should preserve the message id of both if set" do
|
1184
|
+
m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <4321@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1185
|
+
m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there")
|
1186
|
+
m1 == m2
|
1187
|
+
m1.message_id.should == '4321@test.lindsaar.net'
|
1188
|
+
m2.message_id.should == '1234@test.lindsaar.net'
|
1189
|
+
end
|
1190
|
+
end
|
1191
|
+
|
1192
|
+
it "should implement the spaceship operator on the date field" do
|
1193
|
+
now = Time.now
|
1194
|
+
mail1 = Mail.new do
|
1195
|
+
date(now)
|
1196
|
+
end
|
1197
|
+
mail2 = Mail.new do
|
1198
|
+
date(now - 10) # Make mail2 10 seconds 'older'
|
1199
|
+
end
|
1200
|
+
[mail2, mail1].sort.should == [mail2, mail1]
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
it "should have a destinations method" do
|
1204
|
+
mail = Mail.new do
|
1205
|
+
to 'mikel@test.lindsaar.net'
|
1206
|
+
cc 'bob@test.lindsaar.net'
|
1207
|
+
bcc 'sam@test.lindsaar.net'
|
1208
|
+
end
|
1209
|
+
mail.destinations.length.should == 3
|
1210
|
+
end
|
1211
|
+
|
1212
|
+
it "should have a from_addrs method" do
|
1213
|
+
mail = Mail.new do
|
1214
|
+
from 'mikel@test.lindsaar.net'
|
1215
|
+
end
|
1216
|
+
mail.from_addrs.length.should == 1
|
1217
|
+
end
|
1218
|
+
|
1219
|
+
it "should have a from_addrs method that is empty if nil" do
|
1220
|
+
mail = Mail.new do
|
1221
|
+
end
|
1222
|
+
mail.from_addrs.length.should == 0
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
it "should have a to_addrs method" do
|
1226
|
+
mail = Mail.new do
|
1227
|
+
to 'mikel@test.lindsaar.net'
|
1228
|
+
end
|
1229
|
+
mail.to_addrs.length.should == 1
|
1230
|
+
end
|
1231
|
+
|
1232
|
+
it "should have a to_addrs method that is empty if nil" do
|
1233
|
+
mail = Mail.new do
|
1234
|
+
end
|
1235
|
+
mail.to_addrs.length.should == 0
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
it "should have a cc_addrs method" do
|
1239
|
+
mail = Mail.new do
|
1240
|
+
cc 'bob@test.lindsaar.net'
|
1241
|
+
end
|
1242
|
+
mail.cc_addrs.length.should == 1
|
1243
|
+
end
|
1244
|
+
|
1245
|
+
it "should have a cc_addrs method that is empty if nil" do
|
1246
|
+
mail = Mail.new do
|
1247
|
+
end
|
1248
|
+
mail.cc_addrs.length.should == 0
|
1249
|
+
end
|
1250
|
+
|
1251
|
+
it "should have a bcc_addrs method" do
|
1252
|
+
mail = Mail.new do
|
1253
|
+
bcc 'sam@test.lindsaar.net'
|
1254
|
+
end
|
1255
|
+
mail.bcc_addrs.length.should == 1
|
1256
|
+
end
|
1257
|
+
|
1258
|
+
it "should have a bcc_addrs method that is empty if nil" do
|
1259
|
+
mail = Mail.new do
|
1260
|
+
end
|
1261
|
+
mail.bcc_addrs.length.should == 0
|
1262
|
+
end
|
1263
|
+
|
1264
|
+
it "should give destinations even if some of the fields are blank" do
|
1265
|
+
mail = Mail.new do
|
1266
|
+
to 'mikel@test.lindsaar.net'
|
1267
|
+
end
|
1268
|
+
mail.destinations.length.should == 1
|
1269
|
+
end
|
1270
|
+
|
1271
|
+
it "should be able to encode with only one destination" do
|
1272
|
+
mail = Mail.new do
|
1273
|
+
to 'mikel@test.lindsaar.net'
|
1274
|
+
end
|
1275
|
+
mail.encoded
|
1276
|
+
end
|
1277
|
+
|
1278
|
+
end
|
1279
|
+
|
1280
|
+
describe "nested parts" do
|
1281
|
+
it "should provide a way to instantiate a new part as you go down" do
|
1282
|
+
mail = Mail.new do
|
1283
|
+
to 'mikel@test.lindsaar.net'
|
1284
|
+
subject "nested multipart"
|
1285
|
+
from "test@example.com"
|
1286
|
+
content_type "multipart/mixed"
|
1287
|
+
|
1288
|
+
part :content_type => "multipart/alternative", :content_disposition => "inline", :headers => { "foo" => "bar" } do |p|
|
1289
|
+
p.part :content_type => "text/plain", :body => "test text\nline #2"
|
1290
|
+
p.part :content_type => "text/html", :body => "<b>test</b> HTML<br/>\nline #2"
|
1291
|
+
end
|
1292
|
+
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
mail.parts.first.should be_multipart
|
1296
|
+
mail.parts.first.parts.length.should == 2
|
1297
|
+
mail.parts.first.parts[0][:content_type].string.should == "text/plain"
|
1298
|
+
mail.parts.first.parts[0].body.decoded.should == "test text\nline #2"
|
1299
|
+
mail.parts.first.parts[1][:content_type].string.should == "text/html"
|
1300
|
+
mail.parts.first.parts[1].body.decoded.should == "<b>test</b> HTML<br/>\nline #2"
|
1301
|
+
end
|
1302
|
+
end
|
1303
|
+
|
1304
|
+
describe "deliver" do
|
1305
|
+
it "should return self after delivery" do
|
1306
|
+
mail = Mail.new
|
1307
|
+
mail.perform_deliveries = false
|
1308
|
+
mail.deliver.should == mail
|
1309
|
+
end
|
1310
|
+
|
1311
|
+
class DeliveryAgent
|
1312
|
+
def self.deliver_mail(mail)
|
1313
|
+
end
|
1314
|
+
end
|
1315
|
+
|
1316
|
+
it "should pass self to a delivery agent" do
|
1317
|
+
mail = Mail.new
|
1318
|
+
mail.delivery_handler = DeliveryAgent
|
1319
|
+
DeliveryAgent.should_receive(:deliver_mail).with(mail)
|
1320
|
+
mail.deliver
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
class ObserverAgent
|
1324
|
+
def self.delivered_email(mail)
|
1325
|
+
end
|
1326
|
+
end
|
1327
|
+
|
1328
|
+
it "should inform observers that the mail was sent" do
|
1329
|
+
mail = Mail.new
|
1330
|
+
mail.delivery_method :test
|
1331
|
+
Mail.register_observer(ObserverAgent)
|
1332
|
+
ObserverAgent.should_receive(:delivered_email).with(mail)
|
1333
|
+
mail.deliver
|
1334
|
+
end
|
1335
|
+
|
1336
|
+
it "should inform observers that the mail was sent, even if a delivery agent is used" do
|
1337
|
+
mail = Mail.new
|
1338
|
+
mail.delivery_handler = DeliveryAgent
|
1339
|
+
Mail.register_observer(ObserverAgent)
|
1340
|
+
ObserverAgent.should_receive(:delivered_email).with(mail)
|
1341
|
+
mail.deliver
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
class InterceptorAgent
|
1345
|
+
@@intercept = false
|
1346
|
+
def self.intercept=(val)
|
1347
|
+
@@intercept = val
|
1348
|
+
end
|
1349
|
+
def self.delivering_email(mail)
|
1350
|
+
if @@intercept
|
1351
|
+
mail.to = 'bob@example.com'
|
1352
|
+
end
|
1353
|
+
end
|
1354
|
+
end
|
1355
|
+
|
1356
|
+
it "should pass to the interceptor the email just before it gets sent" do
|
1357
|
+
mail = Mail.new
|
1358
|
+
mail.delivery_method :test
|
1359
|
+
Mail.register_interceptor(InterceptorAgent)
|
1360
|
+
InterceptorAgent.should_receive(:delivering_email).with(mail)
|
1361
|
+
InterceptorAgent.intercept = true
|
1362
|
+
mail.deliver
|
1363
|
+
InterceptorAgent.intercept = false
|
1364
|
+
end
|
1365
|
+
|
1366
|
+
it "should let the interceptor that the mail was sent" do
|
1367
|
+
mail = Mail.new
|
1368
|
+
mail.to = 'fred@example.com'
|
1369
|
+
mail.delivery_method :test
|
1370
|
+
Mail.register_interceptor(InterceptorAgent)
|
1371
|
+
InterceptorAgent.intercept = true
|
1372
|
+
mail.deliver
|
1373
|
+
InterceptorAgent.intercept = false
|
1374
|
+
mail.to.should == ['bob@example.com']
|
1375
|
+
end
|
1376
|
+
|
1377
|
+
end
|
1378
|
+
|
1379
|
+
describe "error handling" do
|
1380
|
+
describe "error handling" do
|
1381
|
+
it "should collect up any of its fields' errors" do
|
1382
|
+
mail = Mail.new("Content-Transfer-Encoding: vlad\r\nReply-To: a b b\r\n")
|
1383
|
+
mail.errors.should_not be_blank
|
1384
|
+
mail.errors.size.should == 2
|
1385
|
+
mail.errors[0][0].should == 'Content-Transfer-Encoding'
|
1386
|
+
mail.errors[0][1].should == 'vlad'
|
1387
|
+
mail.errors[1][0].should == 'Reply-To'
|
1388
|
+
mail.errors[1][1].should == 'a b b'
|
1389
|
+
end
|
1390
|
+
end
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
describe "header case should be preserved" do
|
1394
|
+
it "should handle mail[] and keep the header case" do
|
1395
|
+
mail = Mail.new
|
1396
|
+
mail['X-Foo-Bar'] = "Some custom text"
|
1397
|
+
mail.to_s.should match(/X-Foo-Bar: Some custom text/)
|
1398
|
+
end
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
describe "parsing emails with non usascii in the header" do
|
1402
|
+
it "should work" do
|
1403
|
+
mail = Mail.new('From: "Foo áëô îü" <extended@example.net>')
|
1404
|
+
mail.from.should == ['extended@example.net']
|
1405
|
+
mail[:from].decoded.should == '"Foo áëô îü" <extended@example.net>'
|
1406
|
+
mail[:from].encoded.should == "From: =?UTF-8?B?Rm9vIMOhw6vDtCDDrsO8?= <extended@example.net>\r\n"
|
1407
|
+
end
|
1408
|
+
end
|
1409
|
+
end
|