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.
Files changed (321) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +38 -0
  5. data/Rakefile +56 -0
  6. data/VERSION +1 -0
  7. data/lib/rack/mail_exception.rb +103 -0
  8. data/test/helper.rb +13 -0
  9. data/test/test_rack_mail_exception.rb +93 -0
  10. data/vendor/mail/.bundle/config +2 -0
  11. data/vendor/mail/CHANGELOG.rdoc +370 -0
  12. data/vendor/mail/Dependencies.txt +3 -0
  13. data/vendor/mail/Gemfile +17 -0
  14. data/vendor/mail/README.rdoc +572 -0
  15. data/vendor/mail/ROADMAP +92 -0
  16. data/vendor/mail/Rakefile +41 -0
  17. data/vendor/mail/TODO.rdoc +9 -0
  18. data/vendor/mail/lib/mail.rb +76 -0
  19. data/vendor/mail/lib/mail/attachments_list.rb +99 -0
  20. data/vendor/mail/lib/mail/body.rb +287 -0
  21. data/vendor/mail/lib/mail/configuration.rb +67 -0
  22. data/vendor/mail/lib/mail/core_extensions/blank.rb +26 -0
  23. data/vendor/mail/lib/mail/core_extensions/nil.rb +11 -0
  24. data/vendor/mail/lib/mail/core_extensions/string.rb +27 -0
  25. data/vendor/mail/lib/mail/elements.rb +14 -0
  26. data/vendor/mail/lib/mail/elements/address.rb +306 -0
  27. data/vendor/mail/lib/mail/elements/address_list.rb +74 -0
  28. data/vendor/mail/lib/mail/elements/content_disposition_element.rb +30 -0
  29. data/vendor/mail/lib/mail/elements/content_location_element.rb +25 -0
  30. data/vendor/mail/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
  31. data/vendor/mail/lib/mail/elements/content_type_element.rb +35 -0
  32. data/vendor/mail/lib/mail/elements/date_time_element.rb +26 -0
  33. data/vendor/mail/lib/mail/elements/envelope_from_element.rb +34 -0
  34. data/vendor/mail/lib/mail/elements/message_ids_element.rb +29 -0
  35. data/vendor/mail/lib/mail/elements/mime_version_element.rb +26 -0
  36. data/vendor/mail/lib/mail/elements/phrase_list.rb +21 -0
  37. data/vendor/mail/lib/mail/elements/received_element.rb +30 -0
  38. data/vendor/mail/lib/mail/encodings.rb +258 -0
  39. data/vendor/mail/lib/mail/encodings/7bit.rb +31 -0
  40. data/vendor/mail/lib/mail/encodings/8bit.rb +31 -0
  41. data/vendor/mail/lib/mail/encodings/base64.rb +33 -0
  42. data/vendor/mail/lib/mail/encodings/binary.rb +31 -0
  43. data/vendor/mail/lib/mail/encodings/quoted_printable.rb +38 -0
  44. data/vendor/mail/lib/mail/encodings/transfer_encoding.rb +58 -0
  45. data/vendor/mail/lib/mail/envelope.rb +35 -0
  46. data/vendor/mail/lib/mail/field.rb +223 -0
  47. data/vendor/mail/lib/mail/field_list.rb +33 -0
  48. data/vendor/mail/lib/mail/fields.rb +35 -0
  49. data/vendor/mail/lib/mail/fields/bcc_field.rb +56 -0
  50. data/vendor/mail/lib/mail/fields/cc_field.rb +55 -0
  51. data/vendor/mail/lib/mail/fields/comments_field.rb +41 -0
  52. data/vendor/mail/lib/mail/fields/common/address_container.rb +16 -0
  53. data/vendor/mail/lib/mail/fields/common/common_address.rb +125 -0
  54. data/vendor/mail/lib/mail/fields/common/common_date.rb +42 -0
  55. data/vendor/mail/lib/mail/fields/common/common_field.rb +50 -0
  56. data/vendor/mail/lib/mail/fields/common/common_message_id.rb +43 -0
  57. data/vendor/mail/lib/mail/fields/common/parameter_hash.rb +52 -0
  58. data/vendor/mail/lib/mail/fields/content_description_field.rb +19 -0
  59. data/vendor/mail/lib/mail/fields/content_disposition_field.rb +69 -0
  60. data/vendor/mail/lib/mail/fields/content_id_field.rb +63 -0
  61. data/vendor/mail/lib/mail/fields/content_location_field.rb +42 -0
  62. data/vendor/mail/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
  63. data/vendor/mail/lib/mail/fields/content_type_field.rb +185 -0
  64. data/vendor/mail/lib/mail/fields/date_field.rb +55 -0
  65. data/vendor/mail/lib/mail/fields/from_field.rb +55 -0
  66. data/vendor/mail/lib/mail/fields/in_reply_to_field.rb +55 -0
  67. data/vendor/mail/lib/mail/fields/keywords_field.rb +44 -0
  68. data/vendor/mail/lib/mail/fields/message_id_field.rb +83 -0
  69. data/vendor/mail/lib/mail/fields/mime_version_field.rb +53 -0
  70. data/vendor/mail/lib/mail/fields/optional_field.rb +13 -0
  71. data/vendor/mail/lib/mail/fields/received_field.rb +67 -0
  72. data/vendor/mail/lib/mail/fields/references_field.rb +55 -0
  73. data/vendor/mail/lib/mail/fields/reply_to_field.rb +55 -0
  74. data/vendor/mail/lib/mail/fields/resent_bcc_field.rb +55 -0
  75. data/vendor/mail/lib/mail/fields/resent_cc_field.rb +55 -0
  76. data/vendor/mail/lib/mail/fields/resent_date_field.rb +35 -0
  77. data/vendor/mail/lib/mail/fields/resent_from_field.rb +55 -0
  78. data/vendor/mail/lib/mail/fields/resent_message_id_field.rb +34 -0
  79. data/vendor/mail/lib/mail/fields/resent_sender_field.rb +62 -0
  80. data/vendor/mail/lib/mail/fields/resent_to_field.rb +55 -0
  81. data/vendor/mail/lib/mail/fields/return_path_field.rb +64 -0
  82. data/vendor/mail/lib/mail/fields/sender_field.rb +67 -0
  83. data/vendor/mail/lib/mail/fields/structured_field.rb +51 -0
  84. data/vendor/mail/lib/mail/fields/subject_field.rb +16 -0
  85. data/vendor/mail/lib/mail/fields/to_field.rb +55 -0
  86. data/vendor/mail/lib/mail/fields/unstructured_field.rb +166 -0
  87. data/vendor/mail/lib/mail/header.rb +262 -0
  88. data/vendor/mail/lib/mail/mail.rb +234 -0
  89. data/vendor/mail/lib/mail/message.rb +1867 -0
  90. data/vendor/mail/lib/mail/network.rb +9 -0
  91. data/vendor/mail/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  92. data/vendor/mail/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  93. data/vendor/mail/lib/mail/network/delivery_methods/smtp.rb +110 -0
  94. data/vendor/mail/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  95. data/vendor/mail/lib/mail/network/retriever_methods/imap.rb +18 -0
  96. data/vendor/mail/lib/mail/network/retriever_methods/pop3.rb +149 -0
  97. data/vendor/mail/lib/mail/parsers/address_lists.rb +64 -0
  98. data/vendor/mail/lib/mail/parsers/address_lists.treetop +19 -0
  99. data/vendor/mail/lib/mail/parsers/content_disposition.rb +387 -0
  100. data/vendor/mail/lib/mail/parsers/content_disposition.treetop +46 -0
  101. data/vendor/mail/lib/mail/parsers/content_location.rb +139 -0
  102. data/vendor/mail/lib/mail/parsers/content_location.treetop +20 -0
  103. data/vendor/mail/lib/mail/parsers/content_transfer_encoding.rb +162 -0
  104. data/vendor/mail/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
  105. data/vendor/mail/lib/mail/parsers/content_type.rb +539 -0
  106. data/vendor/mail/lib/mail/parsers/content_type.treetop +58 -0
  107. data/vendor/mail/lib/mail/parsers/date_time.rb +114 -0
  108. data/vendor/mail/lib/mail/parsers/date_time.treetop +11 -0
  109. data/vendor/mail/lib/mail/parsers/envelope_from.rb +194 -0
  110. data/vendor/mail/lib/mail/parsers/envelope_from.treetop +32 -0
  111. data/vendor/mail/lib/mail/parsers/message_ids.rb +45 -0
  112. data/vendor/mail/lib/mail/parsers/message_ids.treetop +15 -0
  113. data/vendor/mail/lib/mail/parsers/mime_version.rb +144 -0
  114. data/vendor/mail/lib/mail/parsers/mime_version.treetop +19 -0
  115. data/vendor/mail/lib/mail/parsers/phrase_lists.rb +45 -0
  116. data/vendor/mail/lib/mail/parsers/phrase_lists.treetop +15 -0
  117. data/vendor/mail/lib/mail/parsers/received.rb +71 -0
  118. data/vendor/mail/lib/mail/parsers/received.treetop +11 -0
  119. data/vendor/mail/lib/mail/parsers/rfc2045.rb +464 -0
  120. data/vendor/mail/lib/mail/parsers/rfc2045.treetop +36 -0
  121. data/vendor/mail/lib/mail/parsers/rfc2822.rb +5318 -0
  122. data/vendor/mail/lib/mail/parsers/rfc2822.treetop +410 -0
  123. data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
  124. data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  125. data/vendor/mail/lib/mail/part.rb +102 -0
  126. data/vendor/mail/lib/mail/parts_list.rb +34 -0
  127. data/vendor/mail/lib/mail/patterns.rb +30 -0
  128. data/vendor/mail/lib/mail/utilities.rb +181 -0
  129. data/vendor/mail/lib/mail/version.rb +10 -0
  130. data/vendor/mail/lib/mail/version_specific/ruby_1_8.rb +97 -0
  131. data/vendor/mail/lib/mail/version_specific/ruby_1_9.rb +87 -0
  132. data/vendor/mail/lib/tasks/corpus.rake +125 -0
  133. data/vendor/mail/lib/tasks/treetop.rake +10 -0
  134. data/vendor/mail/mail.gemspec +20 -0
  135. data/vendor/mail/reference/US ASCII Table.txt +130 -0
  136. data/vendor/mail/reference/rfc1035 Domain Implementation and Specification.txt +3083 -0
  137. data/vendor/mail/reference/rfc1049 Content-Type Header Field for Internet Messages.txt +451 -0
  138. data/vendor/mail/reference/rfc1344 Implications of MIME for Internet Mail Gateways.txt +586 -0
  139. data/vendor/mail/reference/rfc1345 Character Mnemonics & Character Sets.txt +5761 -0
  140. data/vendor/mail/reference/rfc1524 A User Agent Configuration Mechanism For Multimedia Mail Format Information.txt +675 -0
  141. data/vendor/mail/reference/rfc1652 SMTP Service Extension for 8bit-MIMEtransport.txt +339 -0
  142. data/vendor/mail/reference/rfc1892 Multipart Report .txt +227 -0
  143. data/vendor/mail/reference/rfc1893 Mail System Status Codes.txt +843 -0
  144. data/vendor/mail/reference/rfc2045 Multipurpose Internet Mail Extensions (1).txt +1739 -0
  145. data/vendor/mail/reference/rfc2046 Multipurpose Internet Mail Extensions (2).txt +2467 -0
  146. data/vendor/mail/reference/rfc2047 Multipurpose Internet Mail Extensions (3).txt +843 -0
  147. data/vendor/mail/reference/rfc2048 Multipurpose Internet Mail Extensions (4).txt +1180 -0
  148. data/vendor/mail/reference/rfc2049 Multipurpose Internet Mail Extensions (5).txt +1347 -0
  149. data/vendor/mail/reference/rfc2111 Content-ID and Message-ID URLs.txt +283 -0
  150. data/vendor/mail/reference/rfc2183 Content-Disposition Header Field.txt +675 -0
  151. data/vendor/mail/reference/rfc2231 MIME Parameter Value and Encoded Word Extensions.txt +563 -0
  152. data/vendor/mail/reference/rfc2387 MIME Multipart-Related Content-type.txt +563 -0
  153. data/vendor/mail/reference/rfc2821 Simple Mail Transfer Protocol.txt +3711 -0
  154. data/vendor/mail/reference/rfc2822 Internet Message Format.txt +2859 -0
  155. data/vendor/mail/reference/rfc3462 Reporting of Mail System Administrative Messages.txt +396 -0
  156. data/vendor/mail/reference/rfc3696 Checking and Transformation of Names.txt +898 -0
  157. data/vendor/mail/reference/rfc4155 The application-mbox Media Type.txt +502 -0
  158. data/vendor/mail/reference/rfc4234 Augmented BNF for Syntax Specifications: ABNF.txt +899 -0
  159. data/vendor/mail/reference/rfc822 Standard for the Format of ARPA Internet Text Messages.txt +2900 -0
  160. data/vendor/mail/spec/environment.rb +15 -0
  161. data/vendor/mail/spec/features/making_a_new_message.feature +14 -0
  162. data/vendor/mail/spec/features/steps/env.rb +6 -0
  163. data/vendor/mail/spec/features/steps/making_a_new_message_steps.rb +11 -0
  164. data/vendor/mail/spec/fixtures/attachments/basic_email.eml +31 -0
  165. data/vendor/mail/spec/fixtures/attachments/test.gif +0 -0
  166. data/vendor/mail/spec/fixtures/attachments/test.jpg +0 -0
  167. data/vendor/mail/spec/fixtures/attachments/test.pdf +0 -0
  168. data/vendor/mail/spec/fixtures/attachments/test.png +0 -0
  169. data/vendor/mail/spec/fixtures/attachments/test.tiff +0 -0
  170. data/vendor/mail/spec/fixtures/attachments/test.zip +0 -0
  171. data/vendor/mail/spec/fixtures/attachments//343/201/246/343/201/231/343/201/250.txt +2 -0
  172. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_disposition.eml +29 -0
  173. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_location.eml +32 -0
  174. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_message_rfc822.eml +92 -0
  175. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_only_email.eml +17 -0
  176. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_pdf.eml +70 -0
  177. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_encoded_name.eml +47 -0
  178. data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_quoted_filename.eml +60 -0
  179. data/vendor/mail/spec/fixtures/emails/error_emails/cant_parse_from.eml +33 -0
  180. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_7-bit.eml +231 -0
  181. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_empty.eml +33 -0
  182. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_plain.eml +148 -0
  183. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_qp_with_space.eml +53 -0
  184. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_spam.eml +44 -0
  185. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_text-html.eml +50 -0
  186. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_8bits.eml +770 -0
  187. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_semi_colon.eml +269 -0
  188. data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_x_uuencode.eml +79 -0
  189. data/vendor/mail/spec/fixtures/emails/error_emails/empty_group_lists.eml +162 -0
  190. data/vendor/mail/spec/fixtures/emails/error_emails/header_fields_with_empty_values.eml +33 -0
  191. data/vendor/mail/spec/fixtures/emails/error_emails/missing_body.eml +16 -0
  192. data/vendor/mail/spec/fixtures/emails/error_emails/missing_content_disposition.eml +43 -0
  193. data/vendor/mail/spec/fixtures/emails/error_emails/multiple_content_types.eml +25 -0
  194. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email11.eml +34 -0
  195. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email12.eml +32 -0
  196. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email2.eml +114 -0
  197. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email4.eml +59 -0
  198. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email7.eml +66 -0
  199. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_encoded_stack_level_too_deep.eml +53 -0
  200. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_illegal_boundary.eml +58 -0
  201. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_mimepart_without_content_type.eml +94 -0
  202. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_multipart_mixed_quoted_boundary.eml +50 -0
  203. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_nested_attachment.eml +100 -0
  204. data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_quoted_illegal_boundary.eml +58 -0
  205. data/vendor/mail/spec/fixtures/emails/mime_emails/sig_only_email.eml +29 -0
  206. data/vendor/mail/spec/fixtures/emails/mime_emails/two_from_in_message.eml +42 -0
  207. data/vendor/mail/spec/fixtures/emails/multi_charset/japanese.eml +9 -0
  208. data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment.eml +27 -0
  209. data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment_long_name.eml +44 -0
  210. data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce1.eml +179 -0
  211. data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce2.eml +179 -0
  212. data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_422.eml +98 -0
  213. data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_530.eml +97 -0
  214. data/vendor/mail/spec/fixtures/emails/plain_emails/basic_email.eml +31 -0
  215. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email.eml +14 -0
  216. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email10.eml +20 -0
  217. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email5.eml +19 -0
  218. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email6.eml +20 -0
  219. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email8.eml +47 -0
  220. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_bad_time.eml +62 -0
  221. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_double_at_in_header.eml +14 -0
  222. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_incorrect_header.eml +28 -0
  223. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_multiple_from.eml +30 -0
  224. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_quoted_with_0d0a.eml +14 -0
  225. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_reply.eml +32 -0
  226. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_simple.eml +11 -0
  227. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_string_in_date_field.eml +17 -0
  228. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_trailing_dot.eml +21 -0
  229. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_bad_date.eml +48 -0
  230. data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_partially_quoted_subject.eml +14 -0
  231. data/vendor/mail/spec/fixtures/emails/rfc2822/example01.eml +8 -0
  232. data/vendor/mail/spec/fixtures/emails/rfc2822/example02.eml +9 -0
  233. data/vendor/mail/spec/fixtures/emails/rfc2822/example03.eml +7 -0
  234. data/vendor/mail/spec/fixtures/emails/rfc2822/example04.eml +7 -0
  235. data/vendor/mail/spec/fixtures/emails/rfc2822/example05.eml +8 -0
  236. data/vendor/mail/spec/fixtures/emails/rfc2822/example06.eml +10 -0
  237. data/vendor/mail/spec/fixtures/emails/rfc2822/example07.eml +9 -0
  238. data/vendor/mail/spec/fixtures/emails/rfc2822/example08.eml +12 -0
  239. data/vendor/mail/spec/fixtures/emails/rfc2822/example09.eml +15 -0
  240. data/vendor/mail/spec/fixtures/emails/rfc2822/example10.eml +15 -0
  241. data/vendor/mail/spec/fixtures/emails/rfc2822/example11.eml +6 -0
  242. data/vendor/mail/spec/fixtures/emails/rfc2822/example12.eml +8 -0
  243. data/vendor/mail/spec/fixtures/emails/rfc2822/example13.eml +10 -0
  244. data/vendor/mail/spec/fixtures/emails/sample_output_multipart +0 -0
  245. data/vendor/mail/spec/mail/attachments_list_spec.rb +214 -0
  246. data/vendor/mail/spec/mail/body_spec.rb +385 -0
  247. data/vendor/mail/spec/mail/configuration_spec.rb +19 -0
  248. data/vendor/mail/spec/mail/core_extensions/string_spec.rb +62 -0
  249. data/vendor/mail/spec/mail/core_extensions_spec.rb +99 -0
  250. data/vendor/mail/spec/mail/elements/address_list_spec.rb +109 -0
  251. data/vendor/mail/spec/mail/elements/address_spec.rb +609 -0
  252. data/vendor/mail/spec/mail/elements/date_time_element_spec.rb +20 -0
  253. data/vendor/mail/spec/mail/elements/envelope_from_element_spec.rb +31 -0
  254. data/vendor/mail/spec/mail/elements/message_ids_element_spec.rb +43 -0
  255. data/vendor/mail/spec/mail/elements/phrase_list_spec.rb +22 -0
  256. data/vendor/mail/spec/mail/elements/received_element_spec.rb +34 -0
  257. data/vendor/mail/spec/mail/encoding_spec.rb +189 -0
  258. data/vendor/mail/spec/mail/encodings/base64_spec.rb +25 -0
  259. data/vendor/mail/spec/mail/encodings/quoted_printable_spec.rb +25 -0
  260. data/vendor/mail/spec/mail/encodings_spec.rb +664 -0
  261. data/vendor/mail/spec/mail/example_emails_spec.rb +303 -0
  262. data/vendor/mail/spec/mail/field_list_spec.rb +33 -0
  263. data/vendor/mail/spec/mail/field_spec.rb +198 -0
  264. data/vendor/mail/spec/mail/fields/bcc_field_spec.rb +89 -0
  265. data/vendor/mail/spec/mail/fields/cc_field_spec.rb +79 -0
  266. data/vendor/mail/spec/mail/fields/comments_field_spec.rb +25 -0
  267. data/vendor/mail/spec/mail/fields/common/address_container_spec.rb +18 -0
  268. data/vendor/mail/spec/mail/fields/common/common_address_spec.rb +132 -0
  269. data/vendor/mail/spec/mail/fields/common/common_date_spec.rb +25 -0
  270. data/vendor/mail/spec/mail/fields/common/common_field_spec.rb +69 -0
  271. data/vendor/mail/spec/mail/fields/common/common_message_id_spec.rb +30 -0
  272. data/vendor/mail/spec/mail/fields/common/parameter_hash_spec.rb +56 -0
  273. data/vendor/mail/spec/mail/fields/content_description_field_spec.rb +39 -0
  274. data/vendor/mail/spec/mail/fields/content_disposition_field_spec.rb +55 -0
  275. data/vendor/mail/spec/mail/fields/content_id_field_spec.rb +117 -0
  276. data/vendor/mail/spec/mail/fields/content_location_field_spec.rb +46 -0
  277. data/vendor/mail/spec/mail/fields/content_transfer_encoding_field_spec.rb +113 -0
  278. data/vendor/mail/spec/mail/fields/content_type_field_spec.rb +678 -0
  279. data/vendor/mail/spec/mail/fields/date_field_spec.rb +73 -0
  280. data/vendor/mail/spec/mail/fields/envelope_spec.rb +48 -0
  281. data/vendor/mail/spec/mail/fields/from_field_spec.rb +89 -0
  282. data/vendor/mail/spec/mail/fields/in_reply_to_field_spec.rb +62 -0
  283. data/vendor/mail/spec/mail/fields/keywords_field_spec.rb +66 -0
  284. data/vendor/mail/spec/mail/fields/message_id_field_spec.rb +147 -0
  285. data/vendor/mail/spec/mail/fields/mime_version_field_spec.rb +166 -0
  286. data/vendor/mail/spec/mail/fields/received_field_spec.rb +44 -0
  287. data/vendor/mail/spec/mail/fields/references_field_spec.rb +35 -0
  288. data/vendor/mail/spec/mail/fields/reply_to_field_spec.rb +67 -0
  289. data/vendor/mail/spec/mail/fields/resent_bcc_field_spec.rb +66 -0
  290. data/vendor/mail/spec/mail/fields/resent_cc_field_spec.rb +66 -0
  291. data/vendor/mail/spec/mail/fields/resent_date_field_spec.rb +39 -0
  292. data/vendor/mail/spec/mail/fields/resent_from_field_spec.rb +66 -0
  293. data/vendor/mail/spec/mail/fields/resent_message_id_field_spec.rb +24 -0
  294. data/vendor/mail/spec/mail/fields/resent_sender_field_spec.rb +58 -0
  295. data/vendor/mail/spec/mail/fields/resent_to_field_spec.rb +66 -0
  296. data/vendor/mail/spec/mail/fields/return_path_field_spec.rb +52 -0
  297. data/vendor/mail/spec/mail/fields/sender_field_spec.rb +58 -0
  298. data/vendor/mail/spec/mail/fields/structured_field_spec.rb +72 -0
  299. data/vendor/mail/spec/mail/fields/to_field_spec.rb +92 -0
  300. data/vendor/mail/spec/mail/fields/unstructured_field_spec.rb +134 -0
  301. data/vendor/mail/spec/mail/header_spec.rb +578 -0
  302. data/vendor/mail/spec/mail/mail_spec.rb +34 -0
  303. data/vendor/mail/spec/mail/message_spec.rb +1409 -0
  304. data/vendor/mail/spec/mail/mime_messages_spec.rb +435 -0
  305. data/vendor/mail/spec/mail/multipart_report_spec.rb +112 -0
  306. data/vendor/mail/spec/mail/network/delivery_methods/file_delivery_spec.rb +79 -0
  307. data/vendor/mail/spec/mail/network/delivery_methods/sendmail_spec.rb +125 -0
  308. data/vendor/mail/spec/mail/network/delivery_methods/smtp_spec.rb +133 -0
  309. data/vendor/mail/spec/mail/network/delivery_methods/test_mailer_spec.rb +57 -0
  310. data/vendor/mail/spec/mail/network/retriever_methods/pop3_spec.rb +180 -0
  311. data/vendor/mail/spec/mail/network_spec.rb +359 -0
  312. data/vendor/mail/spec/mail/parsers/address_lists_parser_spec.rb +15 -0
  313. data/vendor/mail/spec/mail/parsers/content_transfer_encoding_parser_spec.rb +72 -0
  314. data/vendor/mail/spec/mail/part_spec.rb +129 -0
  315. data/vendor/mail/spec/mail/parts_list_spec.rb +12 -0
  316. data/vendor/mail/spec/mail/round_tripping_spec.rb +44 -0
  317. data/vendor/mail/spec/mail/utilities_spec.rb +327 -0
  318. data/vendor/mail/spec/mail/version_specific/escape_paren_1_8_spec.rb +32 -0
  319. data/vendor/mail/spec/matchers/break_down_to.rb +35 -0
  320. data/vendor/mail/spec/spec_helper.rb +163 -0
  321. metadata +442 -0
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'mail/encodings/8bit'
3
+
4
+ module Mail
5
+ module Encodings
6
+ class SevenBit < EightBit
7
+ NAME = '7bit'
8
+
9
+ PRIORITY = 1
10
+
11
+ # 7bit and 8bit operate the same
12
+
13
+ # Decode the string
14
+ def self.decode(str)
15
+ super
16
+ end
17
+
18
+ # Encode the string
19
+ def self.encode(str)
20
+ super
21
+ end
22
+
23
+ # Idenity encodings have a fixed cost, 1 byte out per 1 byte in
24
+ def self.cost(str)
25
+ super
26
+ end
27
+
28
+ Encodings.register(NAME, self)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'mail/encodings/binary'
3
+
4
+ module Mail
5
+ module Encodings
6
+ class EightBit < Binary
7
+ NAME = '8bit'
8
+
9
+ PRIORITY = 4
10
+
11
+ # 8bit is an identiy encoding, meaning nothing to do
12
+
13
+ # Decode the string
14
+ def self.decode(str)
15
+ str.to_lf
16
+ end
17
+
18
+ # Encode the string
19
+ def self.encode(str)
20
+ str.to_crlf
21
+ end
22
+
23
+ # Idenity encodings have a fixed cost, 1 byte out per 1 byte in
24
+ def self.cost(str)
25
+ 1.0
26
+ end
27
+
28
+ Encodings.register(NAME, self)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ require 'mail/encodings/7bit'
3
+
4
+ module Mail
5
+ module Encodings
6
+ class Base64 < SevenBit
7
+ NAME = 'base64'
8
+
9
+ PRIORITY = 3
10
+
11
+ def self.can_encode?(enc)
12
+ true
13
+ end
14
+
15
+ # Decode the string from Base64
16
+ def self.decode(str)
17
+ RubyVer.decode_base64( str )
18
+ end
19
+
20
+ # Encode the string to Base64
21
+ def self.encode(str)
22
+ RubyVer.encode_base64( str ).to_crlf
23
+ end
24
+
25
+ # Base64 has a fixed cost, 4 bytes out per 3 bytes in
26
+ def self.cost(str)
27
+ 4.0/3
28
+ end
29
+
30
+ Encodings.register(NAME, self)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'mail/encodings/transfer_encoding'
3
+
4
+ module Mail
5
+ module Encodings
6
+ class Binary < TransferEncoding
7
+ NAME = 'binary'
8
+
9
+ PRIORITY = 5
10
+
11
+ # Binary is an identiy encoding, meaning nothing to do
12
+
13
+ # Decode the string
14
+ def self.decode(str)
15
+ str
16
+ end
17
+
18
+ # Encode the string
19
+ def self.encode(str)
20
+ str
21
+ end
22
+
23
+ # Idenity encodings have a fixed cost, 1 byte out per 1 byte in
24
+ def self.cost(str)
25
+ 1.0
26
+ end
27
+
28
+ Encodings.register(NAME, self)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ require 'mail/encodings/7bit'
3
+
4
+ module Mail
5
+ module Encodings
6
+ class QuotedPrintable < SevenBit
7
+ NAME='quoted-printable'
8
+
9
+ PRIORITY = 2
10
+
11
+ def self.can_encode?(str)
12
+ EightBit.can_encode? str
13
+ end
14
+
15
+ # Decode the string from Quoted-Printable
16
+ def self.decode(str)
17
+ str.unpack("M*").first
18
+ end
19
+
20
+ def self.encode(str)
21
+ [str].pack("M").gsub(/\n/, "\r\n")
22
+ end
23
+
24
+ def self.cost(str)
25
+ # These bytes probably do not need encoding
26
+ c = str.count("\x9\xA\xD\x20-\x3C\x3E-\x7E")
27
+ # Everything else turns into =XX where XX is a
28
+ # two digit hex number (taking 3 bytes)
29
+ total = (str.bytesize - c)*3 + c
30
+ total.to_f/str.bytesize
31
+ end
32
+
33
+ private
34
+
35
+ Encodings.register(NAME, self)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+ module Encodings
4
+ class TransferEncoding
5
+ NAME = ''
6
+
7
+ PRIORITY = -1
8
+
9
+ def self.can_transport?(enc)
10
+ enc = Encodings.get_name(enc)
11
+ if Encodings.defined? enc
12
+ Encodings.get_encoding(enc).new.is_a? self
13
+ else
14
+ false
15
+ end
16
+ end
17
+
18
+ def self.can_encode?(enc)
19
+ can_transport? enc
20
+ end
21
+
22
+ def self.cost(str)
23
+ raise "Unimplemented"
24
+ end
25
+
26
+ def self.to_s
27
+ self::NAME
28
+ end
29
+
30
+ def self.get_best_compatible(source_encoding, str)
31
+ if self.can_transport? source_encoding then
32
+ source_encoding
33
+ else
34
+ choices = []
35
+ Encodings.get_all.each do |enc|
36
+ choices << enc if self.can_transport? enc and enc.can_encode? source_encoding
37
+ end
38
+ best = nil
39
+ best_cost = 100
40
+ choices.each do |enc|
41
+ this_cost = enc.cost str
42
+ if this_cost < best_cost then
43
+ best_cost = this_cost
44
+ best = enc
45
+ elsif this_cost == best_cost then
46
+ best = enc if enc::PRIORITY < best::PRIORITY
47
+ end
48
+ end
49
+ best
50
+ end
51
+ end
52
+
53
+ def to_s
54
+ self.class.to_s
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = Mail Envelope
4
+ #
5
+ # The Envelope class provides a field for the first line in an
6
+ # mbox file, that looks like "From mikel@test.lindsaar.net DATETIME"
7
+ #
8
+ # This envelope class reads that line, and turns it into an
9
+ # Envelope.from and Envelope.date for your use.
10
+ module Mail
11
+ class Envelope < StructuredField
12
+
13
+ def initialize(*args)
14
+ super(FIELD_NAME, strip_field(FIELD_NAME, args.last))
15
+ end
16
+
17
+ def tree
18
+ @element ||= Mail::EnvelopeFromElement.new(value)
19
+ @tree ||= @element.tree
20
+ end
21
+
22
+ def element
23
+ @element ||= Mail::EnvelopeFromElement.new(value)
24
+ end
25
+
26
+ def date
27
+ ::DateTime.parse("#{element.date_time}")
28
+ end
29
+
30
+ def from
31
+ element.address
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,223 @@
1
+ require 'mail/fields'
2
+
3
+ # encoding: utf-8
4
+ module Mail
5
+ # Provides a single class to call to create a new structured or unstructured
6
+ # field. Works out per RFC what field of field it is being given and returns
7
+ # the correct field of class back on new.
8
+ #
9
+ # ===Per RFC 2822
10
+ #
11
+ # 2.2. Header Fields
12
+ #
13
+ # Header fields are lines composed of a field name, followed by a colon
14
+ # (":"), followed by a field body, and terminated by CRLF. A field
15
+ # name MUST be composed of printable US-ASCII characters (i.e.,
16
+ # characters that have values between 33 and 126, inclusive), except
17
+ # colon. A field body may be composed of any US-ASCII characters,
18
+ # except for CR and LF. However, a field body may contain CRLF when
19
+ # used in header "folding" and "unfolding" as described in section
20
+ # 2.2.3. All field bodies MUST conform to the syntax described in
21
+ # sections 3 and 4 of this standard.
22
+ #
23
+ class Field
24
+
25
+ include Patterns
26
+ include Comparable
27
+
28
+ STRUCTURED_FIELDS = %w[ bcc cc content-description content-disposition
29
+ content-id content-location content-transfer-encoding
30
+ content-type date from in-reply-to keywords message-id
31
+ mime-version received references reply-to
32
+ resent-bcc resent-cc resent-date resent-from
33
+ resent-message-id resent-sender resent-to
34
+ return-path sender to ]
35
+
36
+ KNOWN_FIELDS = STRUCTURED_FIELDS + ['comments', 'subject']
37
+
38
+ # Generic Field Exception
39
+ class FieldError < StandardError
40
+ end
41
+
42
+ # Raised when a parsing error has occurred (ie, a StructuredField has tried
43
+ # to parse a field that is invalid or improperly written)
44
+ class ParseError < FieldError #:nodoc:
45
+ end
46
+
47
+ # Raised when attempting to set a structured field's contents to an invalid syntax
48
+ class SyntaxError < FieldError #:nodoc:
49
+ end
50
+
51
+ # Accepts a string:
52
+ #
53
+ # Field.new("field-name: field data")
54
+ #
55
+ # Or name, value pair:
56
+ #
57
+ # Field.new("field-name", "value")
58
+ #
59
+ # Or a name by itself:
60
+ #
61
+ # Field.new("field-name")
62
+ #
63
+ # Note, does not want a terminating carriage return. Returns
64
+ # self appropriately parsed. If value is not a string, then
65
+ # it will be passed through as is, for example, content-type
66
+ # field can accept an array with the type and a hash of
67
+ # parameters:
68
+ #
69
+ # Field.new('content-type', ['text', 'plain', {:charset => 'UTF-8'}])
70
+ def initialize(name, value = nil, charset = 'utf-8')
71
+ case
72
+ when name =~ /:/ && value.blank? # Field.new("field-name: field data")
73
+ name, value = split(name)
74
+ create_field(name, value, charset)
75
+ when name !~ /:/ && value.blank? # Field.new("field-name")
76
+ create_field(name, nil, charset)
77
+ else # Field.new("field-name", "value")
78
+ create_field(name, value, charset)
79
+ end
80
+ return self
81
+ end
82
+
83
+ def field=(value)
84
+ @field = value
85
+ end
86
+
87
+ def field
88
+ @field
89
+ end
90
+
91
+ def name
92
+ field.name
93
+ end
94
+
95
+ def value
96
+ field.value
97
+ end
98
+
99
+ def value=(val)
100
+ create_field(name, val, charset)
101
+ end
102
+
103
+ def to_s
104
+ field.to_s
105
+ end
106
+
107
+ def update(name, value)
108
+ create_field(name, value, charset)
109
+ end
110
+
111
+ def same( other )
112
+ match_to_s(other.name, field.name)
113
+ end
114
+
115
+ def <=>( other )
116
+ self_order = FIELD_ORDER.rindex(self.name.to_s.downcase) || 100
117
+ other_order = FIELD_ORDER.rindex(other.name.to_s.downcase) || 100
118
+ self_order <=> other_order
119
+ end
120
+
121
+ def method_missing(name, *args, &block)
122
+ field.send(name, *args, &block)
123
+ end
124
+
125
+ FIELD_ORDER = %w[ return-path received
126
+ resent-date resent-from resent-sender resent-to
127
+ resent-cc resent-bcc resent-message-id
128
+ date from sender reply-to to cc bcc
129
+ message-id in-reply-to references
130
+ subject comments keywords
131
+ mime-version content-type content-transfer-encoding
132
+ content-location content-disposition content-description ]
133
+
134
+ private
135
+
136
+ def split(raw_field)
137
+ match_data = raw_field.match(/^(#{FIELD_NAME})\s*:\s*(#{FIELD_BODY})?$/u)
138
+ [match_data[1].to_s.strip, match_data[2].to_s.strip]
139
+ rescue
140
+ STDERR.puts "WARNING: Could not parse (and so ignorning) '#{raw_field}'"
141
+ end
142
+
143
+ def create_field(name, value, charset)
144
+ begin
145
+ self.field = new_field(name, value, charset)
146
+ rescue Mail::Field::ParseError => e
147
+ self.field = Mail::UnstructuredField.new(name, value)
148
+ self.field.errors << [name, value, e]
149
+ self.field
150
+ end
151
+ end
152
+
153
+ def new_field(name, value, charset)
154
+ # Could do this with constantize and make it "as DRY as", but a simple case
155
+ # statement is, well, simpler...
156
+ case name.to_s.downcase
157
+ when /^to$/i
158
+ ToField.new(value, charset)
159
+ when /^cc$/i
160
+ CcField.new(value, charset)
161
+ when /^bcc$/i
162
+ BccField.new(value, charset)
163
+ when /^message-id$/i
164
+ MessageIdField.new(value, charset)
165
+ when /^in-reply-to$/i
166
+ InReplyToField.new(value, charset)
167
+ when /^references$/i
168
+ ReferencesField.new(value, charset)
169
+ when /^subject$/i
170
+ SubjectField.new(value, charset)
171
+ when /^comments$/i
172
+ CommentsField.new(value, charset)
173
+ when /^keywords$/i
174
+ KeywordsField.new(value, charset)
175
+ when /^date$/i
176
+ DateField.new(value, charset)
177
+ when /^from$/i
178
+ FromField.new(value, charset)
179
+ when /^sender$/i
180
+ SenderField.new(value, charset)
181
+ when /^reply-to$/i
182
+ ReplyToField.new(value, charset)
183
+ when /^resent-date$/i
184
+ ResentDateField.new(value, charset)
185
+ when /^resent-from$/i
186
+ ResentFromField.new(value, charset)
187
+ when /^resent-sender$/i
188
+ ResentSenderField.new(value, charset)
189
+ when /^resent-to$/i
190
+ ResentToField.new(value, charset)
191
+ when /^resent-cc$/i
192
+ ResentCcField.new(value, charset)
193
+ when /^resent-bcc$/i
194
+ ResentBccField.new(value, charset)
195
+ when /^resent-message-id$/i
196
+ ResentMessageIdField.new(value, charset)
197
+ when /^return-path$/i
198
+ ReturnPathField.new(value, charset)
199
+ when /^received$/i
200
+ ReceivedField.new(value, charset)
201
+ when /^mime-version$/i
202
+ MimeVersionField.new(value, charset)
203
+ when /^content-transfer-encoding$/i
204
+ ContentTransferEncodingField.new(value, charset)
205
+ when /^content-description$/i
206
+ ContentDescriptionField.new(value, charset)
207
+ when /^content-disposition$/i
208
+ ContentDispositionField.new(value, charset)
209
+ when /^content-type$/i
210
+ ContentTypeField.new(value, charset)
211
+ when /^content-id$/i
212
+ ContentIdField.new(value, charset)
213
+ when /^content-location$/i
214
+ ContentLocationField.new(value, charset)
215
+ else
216
+ OptionalField.new(name, value, charset)
217
+ end
218
+
219
+ end
220
+
221
+ end
222
+
223
+ end