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,97 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mail
|
3
|
+
class Ruby18
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
# Escapes any parenthesis in a string that are unescaped. This can't
|
7
|
+
# use the Ruby 1.9.1 regexp feature of negative look behind so we have
|
8
|
+
# to do two replacement, first unescape everything, then re-escape it
|
9
|
+
def Ruby18.escape_paren( str )
|
10
|
+
re = /\\\)/
|
11
|
+
str = str.gsub(re) { |s| ')'}
|
12
|
+
re = /\\\(/
|
13
|
+
str = str.gsub(re) { |s| '('}
|
14
|
+
re = /([\(\)])/ # Only match unescaped parens
|
15
|
+
str.gsub(re) { |s| '\\' + s }
|
16
|
+
end
|
17
|
+
|
18
|
+
def Ruby18.paren( str )
|
19
|
+
str = $1 if str =~ /^\((.*)?\)$/
|
20
|
+
str = escape_paren( str )
|
21
|
+
'(' + str + ')'
|
22
|
+
end
|
23
|
+
|
24
|
+
def Ruby18.escape_bracket( str )
|
25
|
+
re = /\\\>/
|
26
|
+
str = str.gsub(re) { |s| '>'}
|
27
|
+
re = /\\\</
|
28
|
+
str = str.gsub(re) { |s| '<'}
|
29
|
+
re = /([\<\>])/ # Only match unescaped parens
|
30
|
+
str.gsub(re) { |s| '\\' + s }
|
31
|
+
end
|
32
|
+
|
33
|
+
def Ruby18.bracket( str )
|
34
|
+
str = $1 if str =~ /^\<(.*)?\>$/
|
35
|
+
str = escape_bracket( str )
|
36
|
+
'<' + str + '>'
|
37
|
+
end
|
38
|
+
|
39
|
+
def Ruby18.decode_base64(str)
|
40
|
+
Base64.decode64(str)
|
41
|
+
end
|
42
|
+
|
43
|
+
def Ruby18.encode_base64(str)
|
44
|
+
Base64.encode64(str)
|
45
|
+
end
|
46
|
+
|
47
|
+
def Ruby18.has_constant?(klass, string)
|
48
|
+
klass.constants.include?( string )
|
49
|
+
end
|
50
|
+
|
51
|
+
def Ruby18.get_constant(klass, string)
|
52
|
+
klass.const_get( string )
|
53
|
+
end
|
54
|
+
|
55
|
+
def Ruby18.b_value_encode(str, encoding)
|
56
|
+
# Ruby 1.8 requires an encoding to work
|
57
|
+
raise ArgumentError, "Must supply an encoding" if encoding.nil?
|
58
|
+
encoding = encoding.to_s.upcase.gsub('_', '-')
|
59
|
+
[Encodings::Base64.encode(str), encoding]
|
60
|
+
end
|
61
|
+
|
62
|
+
def Ruby18.b_value_decode(str)
|
63
|
+
match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
|
64
|
+
if match
|
65
|
+
encoding = match[1]
|
66
|
+
str = Ruby18.decode_base64(match[2])
|
67
|
+
end
|
68
|
+
str
|
69
|
+
end
|
70
|
+
|
71
|
+
def Ruby18.q_value_encode(str, encoding)
|
72
|
+
# Ruby 1.8 requires an encoding to work
|
73
|
+
raise ArgumentError, "Must supply an encoding" if encoding.nil?
|
74
|
+
encoding = encoding.to_s.upcase.gsub('_', '-')
|
75
|
+
[Encodings::QuotedPrintable.encode(str), encoding]
|
76
|
+
end
|
77
|
+
|
78
|
+
def Ruby18.q_value_decode(str)
|
79
|
+
match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
|
80
|
+
if match
|
81
|
+
encoding = match[1]
|
82
|
+
str = Encodings::QuotedPrintable.decode(match[2])
|
83
|
+
end
|
84
|
+
str
|
85
|
+
end
|
86
|
+
|
87
|
+
def Ruby18.param_decode(str, encoding)
|
88
|
+
URI.unescape(str)
|
89
|
+
end
|
90
|
+
|
91
|
+
def Ruby18.param_encode(str)
|
92
|
+
encoding = $KCODE.to_s.downcase
|
93
|
+
language = Mail::Configuration.instance.param_encode_language
|
94
|
+
"#{encoding}'#{language}'#{URI.escape(str)}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mail
|
3
|
+
class Ruby19
|
4
|
+
|
5
|
+
# Escapes any parenthesis in a string that are unescaped this uses
|
6
|
+
# a Ruby 1.9.1 regexp feature of negative look behind
|
7
|
+
def Ruby19.escape_paren( str )
|
8
|
+
re = /(?<!\\)([\(\)])/ # Only match unescaped parens
|
9
|
+
str.gsub(re) { |s| '\\' + s }
|
10
|
+
end
|
11
|
+
|
12
|
+
def Ruby19.paren( str )
|
13
|
+
str = $1 if str =~ /^\((.*)?\)$/
|
14
|
+
str = escape_paren( str )
|
15
|
+
'(' + str + ')'
|
16
|
+
end
|
17
|
+
|
18
|
+
def Ruby19.escape_bracket( str )
|
19
|
+
re = /(?<!\\)([\<\>])/ # Only match unescaped brackets
|
20
|
+
str.gsub(re) { |s| '\\' + s }
|
21
|
+
end
|
22
|
+
|
23
|
+
def Ruby19.bracket( str )
|
24
|
+
str = $1 if str =~ /^\<(.*)?\>$/
|
25
|
+
str = escape_bracket( str )
|
26
|
+
'<' + str + '>'
|
27
|
+
end
|
28
|
+
|
29
|
+
def Ruby19.decode_base64(str)
|
30
|
+
str.unpack( 'm' ).first.force_encoding(Encoding::BINARY)
|
31
|
+
end
|
32
|
+
|
33
|
+
def Ruby19.encode_base64(str)
|
34
|
+
[str].pack( 'm' )
|
35
|
+
end
|
36
|
+
|
37
|
+
def Ruby19.has_constant?(klass, string)
|
38
|
+
klass.constants.include?( string.to_sym )
|
39
|
+
end
|
40
|
+
|
41
|
+
def Ruby19.get_constant(klass, string)
|
42
|
+
klass.const_get( string.to_sym )
|
43
|
+
end
|
44
|
+
|
45
|
+
def Ruby19.b_value_encode(str, encoding = nil)
|
46
|
+
encoding = str.encoding.to_s
|
47
|
+
[Ruby19.encode_base64(str), encoding]
|
48
|
+
end
|
49
|
+
|
50
|
+
def Ruby19.b_value_decode(str)
|
51
|
+
match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
|
52
|
+
if match
|
53
|
+
encoding = match[1]
|
54
|
+
str = Ruby19.decode_base64(match[2])
|
55
|
+
str.force_encoding(encoding)
|
56
|
+
end
|
57
|
+
str
|
58
|
+
end
|
59
|
+
|
60
|
+
def Ruby19.q_value_encode(str, encoding = nil)
|
61
|
+
encoding = str.encoding.to_s
|
62
|
+
[Encodings::QuotedPrintable.encode(str), encoding]
|
63
|
+
end
|
64
|
+
|
65
|
+
def Ruby19.q_value_decode(str)
|
66
|
+
match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
|
67
|
+
if match
|
68
|
+
encoding = match[1]
|
69
|
+
str = Encodings::QuotedPrintable.decode(match[2])
|
70
|
+
str.force_encoding(encoding)
|
71
|
+
end
|
72
|
+
str
|
73
|
+
end
|
74
|
+
|
75
|
+
def Ruby19.param_decode(str, encoding)
|
76
|
+
string = URI.unescape(str)
|
77
|
+
string.force_encoding(encoding) if encoding
|
78
|
+
string
|
79
|
+
end
|
80
|
+
|
81
|
+
def Ruby19.param_encode(str)
|
82
|
+
encoding = str.encoding.to_s.downcase
|
83
|
+
language = Mail::Configuration.instance.param_encode_language
|
84
|
+
"#{encoding}'#{language}'#{URI.escape(str)}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
namespace :corpus do
|
2
|
+
|
3
|
+
task :load_mail do
|
4
|
+
require File.expand_path('../../../spec/environment')
|
5
|
+
require 'mail'
|
6
|
+
end
|
7
|
+
|
8
|
+
# Used to run parsing against an arbitrary corpus of email.
|
9
|
+
# For example: http://plg.uwaterloo.ca/~gvcormac/treccorpus/
|
10
|
+
desc "Provide a LOCATION=/some/dir to verify parsing in bulk, otherwise defaults"
|
11
|
+
task :verify_all => :load_mail do
|
12
|
+
|
13
|
+
root_of_corpus = ENV['LOCATION'] || 'corpus/spam'
|
14
|
+
@save_failures_to = ENV['SAVE_TO'] || 'spec/fixtures/emails/failed_emails'
|
15
|
+
@failed_emails = []
|
16
|
+
@checked_count = 0
|
17
|
+
|
18
|
+
if root_of_corpus
|
19
|
+
root_of_corpus = File.expand_path(root_of_corpus)
|
20
|
+
if not File.directory?(root_of_corpus)
|
21
|
+
raise "\n\tPath '#{root_of_corpus}' is not a directory.\n\n"
|
22
|
+
end
|
23
|
+
else
|
24
|
+
raise "\n\tSupply path to corpus: LOCATION=/path/to/corpus\n\n"
|
25
|
+
end
|
26
|
+
|
27
|
+
if @save_failures_to
|
28
|
+
if not File.directory?(@save_failures_to)
|
29
|
+
raise "\n\tPath '#{@save_failures_to}' is not a directory.\n\n"
|
30
|
+
end
|
31
|
+
@save_failures_to = File.expand_path(@save_failures_to)
|
32
|
+
puts "Mail which fails to parse will be saved in '#{@save_failures_to}'"
|
33
|
+
end
|
34
|
+
|
35
|
+
puts "Checking '#{root_of_corpus}' directory (recursively)"
|
36
|
+
|
37
|
+
# we're tracking all the errors separately, don't clutter terminal
|
38
|
+
$stderr_backup = $stderr.dup
|
39
|
+
$stderr.reopen("/dev/null", "w")
|
40
|
+
STDERR = $stderr
|
41
|
+
|
42
|
+
dir_node(root_of_corpus)
|
43
|
+
|
44
|
+
# put our toys back now that we're done with them
|
45
|
+
$stderr = $stderr_backup.dup
|
46
|
+
STDERR = $stderr
|
47
|
+
|
48
|
+
puts "\n\n"
|
49
|
+
|
50
|
+
if @failed_emails.any?
|
51
|
+
report_failures_to_stdout
|
52
|
+
end
|
53
|
+
puts "Out of Total: #{@checked_count}"
|
54
|
+
|
55
|
+
if @save_failures_to
|
56
|
+
puts "Add SAVE_TO=/some/dir to save failed emails to for review.,"
|
57
|
+
puts "May result in a lot of saved files. Do a dry run first!\n\n"
|
58
|
+
else
|
59
|
+
puts "There are no errors"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def dir_node(path)
|
64
|
+
puts "\n\n"
|
65
|
+
puts "Checking emails in '#{path}':"
|
66
|
+
|
67
|
+
entries = Dir.entries(path)
|
68
|
+
|
69
|
+
entries.each do |entry|
|
70
|
+
next if ['.', '..'].include?(entry)
|
71
|
+
full_path = File.join(path, entry)
|
72
|
+
|
73
|
+
if File.file?(full_path)
|
74
|
+
file_node(full_path)
|
75
|
+
elsif File.directory?(full_path)
|
76
|
+
dir_node(full_path)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def file_node(path)
|
82
|
+
verify(path)
|
83
|
+
end
|
84
|
+
|
85
|
+
def verify(path)
|
86
|
+
result, message = parse_as_mail(path)
|
87
|
+
if result
|
88
|
+
print '.'
|
89
|
+
$stdout.flush
|
90
|
+
else
|
91
|
+
save_failure(path, message)
|
92
|
+
print 'x'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def save_failure(path, message)
|
97
|
+
@failed_emails << [path, message]
|
98
|
+
if @save_failures_to
|
99
|
+
email_basename = File.basename(path)
|
100
|
+
failure_as_filename = message.gsub(/\W/, '_')
|
101
|
+
new_email_name = [failure_as_filename, email_basename].join("_")
|
102
|
+
File.open(File.join(@save_failures_to, new_email_name), 'w+') do |fh|
|
103
|
+
fh << File.read(path)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def parse_as_mail(path)
|
109
|
+
@checked_count += 1
|
110
|
+
begin
|
111
|
+
parsed_mail = Mail.read(path)
|
112
|
+
[true, nil]
|
113
|
+
rescue => e
|
114
|
+
[false, e.message]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def report_failures_to_stdout
|
119
|
+
@failed_emails.each do |failed|
|
120
|
+
puts "#{failed[0]} : #{failed[1]}"
|
121
|
+
end
|
122
|
+
puts "Failed: #{@failed_emails.size}"
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "mail"
|
3
|
+
s.version = "2.2.0"
|
4
|
+
s.author = "Mikel Lindsaar"
|
5
|
+
s.email = "raasdnil@gmail.com"
|
6
|
+
s.homepage = "http://github.com/mikel/mail"
|
7
|
+
s.description = "A really Ruby Mail handler."
|
8
|
+
s.summary = "Mail provides a nice Ruby DSL for making, sending and reading emails."
|
9
|
+
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.has_rdoc = true
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "TODO.rdoc"]
|
13
|
+
|
14
|
+
s.add_dependency('activesupport', ">= 2.3.4")
|
15
|
+
s.add_dependency('mime-types')
|
16
|
+
s.add_dependency('treetop', '>= 1.4.5')
|
17
|
+
|
18
|
+
s.require_path = 'lib'
|
19
|
+
s.files = %w(README.rdoc Rakefile TODO.rdoc) + Dir.glob("lib/**/*")
|
20
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
CHAR HEX DESCRIPTION
|
2
|
+
======================================================
|
3
|
+
00 NULL (U+0000)
|
4
|
+
01 START OF HEADING (U+0001)
|
5
|
+
02 START OF TEXT (U+0002)
|
6
|
+
03 END OF TEXT (U+0003)
|
7
|
+
04 END OF TRANSMISSION (U+0004)
|
8
|
+
05 ENQUIRY (U+0005)
|
9
|
+
06 ACKNOWLEDGE (U+0006)
|
10
|
+
07 BELL (U+0007)
|
11
|
+
08 BACKSPACE (U+0008)
|
12
|
+
09 CHARACTER TABULATION (U+0009)
|
13
|
+
0a LINE FEED (LF) (U+000A)
|
14
|
+
0b LINE TABULATION (U+000B)
|
15
|
+
0c FORM FEED (FF) (U+000C)
|
16
|
+
0d CARRIAGE RETURN (CR) (U+000D)
|
17
|
+
0e SHIFT OUT (U+000E)
|
18
|
+
0f SHIFT IN (U+000F)
|
19
|
+
10 DATA LINK ESCAPE (U+0010)
|
20
|
+
11 DEVICE CONTROL ONE (U+0011)
|
21
|
+
12 DEVICE CONTROL TWO (U+0012)
|
22
|
+
13 DEVICE CONTROL THREE (U+0013)
|
23
|
+
14 DEVICE CONTROL FOUR (U+0014)
|
24
|
+
15 NEGATIVE ACKNOWLEDGE (U+0015)
|
25
|
+
16 SYNCHRONOUS IDLE (U+0016)
|
26
|
+
17 END OF TRANSMISSION BLOCK (U+0017)
|
27
|
+
18 CANCEL (U+0018)
|
28
|
+
19 END OF MEDIUM (U+0019)
|
29
|
+
1a SUBSTITUTE (U+001A)
|
30
|
+
1b ESCAPE (U+001B)
|
31
|
+
1c INFORMATION SEPARATOR FOUR (U+001C)
|
32
|
+
1d INFORMATION SEPARATOR THREE (U+001D)
|
33
|
+
1e INFORMATION SEPARATOR TWO (U+001E)
|
34
|
+
1f INFORMATION SEPARATOR ONE (U+001F)
|
35
|
+
20 SPACE (U+0020)
|
36
|
+
! 21 EXCLAMATION MARK (U+0021)
|
37
|
+
" 22 QUOTATION MARK (U+0022)
|
38
|
+
# 23 NUMBER SIGN (U+0023)
|
39
|
+
$ 24 DOLLAR SIGN (U+0024)
|
40
|
+
% 25 PERCENT SIGN (U+0025)
|
41
|
+
& 26 AMPERSAND (U+0026)
|
42
|
+
' 27 APOSTROPHE (U+0027)
|
43
|
+
( 28 LEFT PARENTHESIS (U+0028)
|
44
|
+
) 29 RIGHT PARENTHESIS (U+0029)
|
45
|
+
* 2a ASTERISK (U+002A)
|
46
|
+
+ 2b PLUS SIGN (U+002B)
|
47
|
+
, 2c COMMA (U+002C)
|
48
|
+
- 2d HYPHEN-MINUS (U+002D)
|
49
|
+
. 2e FULL STOP (U+002E)
|
50
|
+
/ 2f SOLIDUS (U+002F)
|
51
|
+
0 30 DIGIT ZERO (U+0030)
|
52
|
+
1 31 DIGIT ONE (U+0031)
|
53
|
+
2 32 DIGIT TWO (U+0032)
|
54
|
+
3 33 DIGIT THREE (U+0033)
|
55
|
+
4 34 DIGIT FOUR (U+0034)
|
56
|
+
5 35 DIGIT FIVE (U+0035)
|
57
|
+
6 36 DIGIT SIX (U+0036)
|
58
|
+
7 37 DIGIT SEVEN (U+0037)
|
59
|
+
8 38 DIGIT EIGHT (U+0038)
|
60
|
+
9 39 DIGIT NINE (U+0039)
|
61
|
+
: 3a COLON (U+003A)
|
62
|
+
; 3b SEMICOLON (U+003B)
|
63
|
+
< 3c LESS-THAN SIGN (U+003C)
|
64
|
+
= 3d EQUALS SIGN (U+003D)
|
65
|
+
> 3e GREATER-THAN SIGN (U+003E)
|
66
|
+
? 3f QUESTION MARK (U+003F)
|
67
|
+
@ 40 COMMERCIAL AT (U+0040)
|
68
|
+
A 41 LATIN CAPITAL LETTER A (U+0041)
|
69
|
+
B 42 LATIN CAPITAL LETTER B (U+0042)
|
70
|
+
C 43 LATIN CAPITAL LETTER C (U+0043)
|
71
|
+
D 44 LATIN CAPITAL LETTER D (U+0044)
|
72
|
+
E 45 LATIN CAPITAL LETTER E (U+0045)
|
73
|
+
F 46 LATIN CAPITAL LETTER F (U+0046)
|
74
|
+
G 47 LATIN CAPITAL LETTER G (U+0047)
|
75
|
+
H 48 LATIN CAPITAL LETTER H (U+0048)
|
76
|
+
I 49 LATIN CAPITAL LETTER I (U+0049)
|
77
|
+
J 4a LATIN CAPITAL LETTER J (U+004A)
|
78
|
+
K 4b LATIN CAPITAL LETTER K (U+004B)
|
79
|
+
L 4c LATIN CAPITAL LETTER L (U+004C)
|
80
|
+
M 4d LATIN CAPITAL LETTER M (U+004D)
|
81
|
+
N 4e LATIN CAPITAL LETTER N (U+004E)
|
82
|
+
O 4f LATIN CAPITAL LETTER O (U+004F)
|
83
|
+
P 50 LATIN CAPITAL LETTER P (U+0050)
|
84
|
+
Q 51 LATIN CAPITAL LETTER Q (U+0051)
|
85
|
+
R 52 LATIN CAPITAL LETTER R (U+0052)
|
86
|
+
S 53 LATIN CAPITAL LETTER S (U+0053)
|
87
|
+
T 54 LATIN CAPITAL LETTER T (U+0054)
|
88
|
+
U 55 LATIN CAPITAL LETTER U (U+0055)
|
89
|
+
V 56 LATIN CAPITAL LETTER V (U+0056)
|
90
|
+
W 57 LATIN CAPITAL LETTER W (U+0057)
|
91
|
+
X 58 LATIN CAPITAL LETTER X (U+0058)
|
92
|
+
Y 59 LATIN CAPITAL LETTER Y (U+0059)
|
93
|
+
Z 5a LATIN CAPITAL LETTER Z (U+005A)
|
94
|
+
[ 5b LEFT SQUARE BRACKET (U+005B)
|
95
|
+
\ 5c REVERSE SOLIDUS (U+005C)
|
96
|
+
] 5d RIGHT SQUARE BRACKET (U+005D)
|
97
|
+
^ 5e CIRCUMFLEX ACCENT (U+005E)
|
98
|
+
_ 5f LOW LINE (U+005F)
|
99
|
+
` 60 GRAVE ACCENT (U+0060)
|
100
|
+
a 61 LATIN SMALL LETTER A (U+0061)
|
101
|
+
b 62 LATIN SMALL LETTER B (U+0062)
|
102
|
+
c 63 LATIN SMALL LETTER C (U+0063)
|
103
|
+
d 64 LATIN SMALL LETTER D (U+0064)
|
104
|
+
e 65 LATIN SMALL LETTER E (U+0065)
|
105
|
+
f 66 LATIN SMALL LETTER F (U+0066)
|
106
|
+
g 67 LATIN SMALL LETTER G (U+0067)
|
107
|
+
h 68 LATIN SMALL LETTER H (U+0068)
|
108
|
+
i 69 LATIN SMALL LETTER I (U+0069)
|
109
|
+
j 6a LATIN SMALL LETTER J (U+006A)
|
110
|
+
k 6b LATIN SMALL LETTER K (U+006B)
|
111
|
+
l 6c LATIN SMALL LETTER L (U+006C)
|
112
|
+
m 6d LATIN SMALL LETTER M (U+006D)
|
113
|
+
n 6e LATIN SMALL LETTER N (U+006E)
|
114
|
+
o 6f LATIN SMALL LETTER O (U+006F)
|
115
|
+
p 70 LATIN SMALL LETTER P (U+0070)
|
116
|
+
q 71 LATIN SMALL LETTER Q (U+0071)
|
117
|
+
r 72 LATIN SMALL LETTER R (U+0072)
|
118
|
+
s 73 LATIN SMALL LETTER S (U+0073)
|
119
|
+
t 74 LATIN SMALL LETTER T (U+0074)
|
120
|
+
u 75 LATIN SMALL LETTER U (U+0075)
|
121
|
+
v 76 LATIN SMALL LETTER V (U+0076)
|
122
|
+
w 77 LATIN SMALL LETTER W (U+0077)
|
123
|
+
x 78 LATIN SMALL LETTER X (U+0078)
|
124
|
+
y 79 LATIN SMALL LETTER Y (U+0079)
|
125
|
+
z 7a LATIN SMALL LETTER Z (U+007A)
|
126
|
+
{ 7b LEFT CURLY BRACKET (U+007B)
|
127
|
+
| 7c VERTICAL LINE (U+007C)
|
128
|
+
} 7d RIGHT CURLY BRACKET (U+007D)
|
129
|
+
~ 7e TILDE (U+007E)
|
130
|
+
7f DELETE (U+007F)
|