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,43 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+ module CommonMessageId # :nodoc:
4
+ def element
5
+ @element ||= Mail::MessageIdsElement.new(value)
6
+ end
7
+
8
+ def parse(val = value)
9
+ unless val.blank?
10
+ @element = Mail::MessageIdsElement.new(val)
11
+ else
12
+ nil
13
+ end
14
+ end
15
+
16
+ def message_id
17
+ element.message_id
18
+ end
19
+
20
+ def message_ids
21
+ element.message_ids
22
+ end
23
+
24
+ def default
25
+ if message_ids.length == 1
26
+ message_ids[0]
27
+ else
28
+ message_ids
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def do_encode(field_name)
35
+ %Q{#{field_name}: #{message_ids.map { |m| "<#{m}>" }.join(', ')}\r\n}
36
+ end
37
+
38
+ def do_decode
39
+ "#{message_ids.map { |m| "<#{m}>" }.join(', ')}"
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+
4
+ # ParameterHash is an intelligent Hash that allows you to add
5
+ # parameter values including the MIME extension paramaters that
6
+ # have the name*0="blah", name*1="bleh" keys, and will just return
7
+ # a single key called name="blahbleh" and do any required un-encoding
8
+ # to make that happen
9
+ # Parameters are defined in RFC2045, split keys are in RFC2231
10
+
11
+ class ParameterHash < Hash
12
+
13
+ include Mail::Utilities
14
+
15
+ def []=(k, v)
16
+ super(k.to_s, v)
17
+ end
18
+
19
+ def [](key_name)
20
+ pairs = select { |k,v| k =~ /^#{key_name}\*/ }
21
+ pairs = pairs.to_a if RUBY_VERSION >= '1.9'
22
+ if pairs.empty? # Just dealing with a single value pair
23
+ super(key_name.to_s)
24
+ else # Dealing with a multiple value pair or a single encoded value pair
25
+ string = pairs.sort { |a,b| a.first <=> b.first }.map { |v| v.last }.join('')
26
+ if mt = string.match(/([\w\d\-]+)'(\w\w)'(.*)/)
27
+ string = mt[3]
28
+ encoding = mt[1]
29
+ else
30
+ encoding = nil
31
+ end
32
+ Mail::Encodings.param_decode(string, encoding)
33
+ end
34
+ end
35
+
36
+ def encoded
37
+ map.sort_by { |e| e.first.to_s }.map do |key_name, value|
38
+ unless value.ascii_only?
39
+ value = Mail::Encodings.param_encode(value)
40
+ key_name = "#{key_name}*"
41
+ end
42
+ %Q{#{key_name}=#{quote_token(value)}}
43
+ end.join(";\r\n\t")
44
+ end
45
+
46
+ def decoded
47
+ map.sort_by { |e| e.first.to_s }.map do |key_name, value|
48
+ %Q{#{key_name}=#{quote_token(value)}}
49
+ end.join("; ")
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ #
3
+ #
4
+ #
5
+ module Mail
6
+ class ContentDescriptionField < UnstructuredField
7
+
8
+ FIELD_NAME = 'content-description'
9
+ CAPITALIZED_FIELD = 'Content-Description'
10
+
11
+ def initialize(value = nil, charset = 'utf-8')
12
+ self.charset = charset
13
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
14
+ self.parse
15
+ self
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ require 'mail/fields/common/parameter_hash'
3
+
4
+ module Mail
5
+ class ContentDispositionField < StructuredField
6
+
7
+ FIELD_NAME = 'content-disposition'
8
+ CAPITALIZED_FIELD = 'Content-Disposition'
9
+
10
+ def initialize(value = nil, charset = 'utf-8')
11
+ self.charset = charset
12
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
13
+ self.parse
14
+ self
15
+ end
16
+
17
+ def parse(val = value)
18
+ unless val.blank?
19
+ @element = Mail::ContentDispositionElement.new(val)
20
+ end
21
+ end
22
+
23
+ def element
24
+ @element ||= Mail::ContentDispositionElement.new(value)
25
+ end
26
+
27
+ def disposition_type
28
+ element.disposition_type
29
+ end
30
+
31
+ def parameters
32
+ @parameters = ParameterHash.new
33
+ element.parameters.each { |p| @parameters.merge!(p) }
34
+ @parameters
35
+ end
36
+
37
+ def filename
38
+ case
39
+ when !parameters['filename'].blank?
40
+ @filename = parameters['filename']
41
+ when !parameters['name'].blank?
42
+ @filename = parameters['name']
43
+ else
44
+ @filename = nil
45
+ end
46
+ @filename
47
+ end
48
+
49
+ # TODO: Fix this up
50
+ def encoded
51
+ if parameters.length > 0
52
+ p = ";\r\n\t#{parameters.encoded}\r\n"
53
+ else
54
+ p = ""
55
+ end
56
+ "#{CAPITALIZED_FIELD}: #{disposition_type}" + p
57
+ end
58
+
59
+ def decoded
60
+ if parameters.length > 0
61
+ p = "; #{parameters.decoded}"
62
+ else
63
+ p = ""
64
+ end
65
+ "#{disposition_type}" + p
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+ #
3
+ #
4
+ #
5
+ module Mail
6
+ class ContentIdField < StructuredField
7
+
8
+ FIELD_NAME = 'content-id'
9
+ CAPITALIZED_FIELD = "Content-ID"
10
+
11
+ def initialize(value = nil, charset = 'utf-8')
12
+ self.charset = charset
13
+ @uniq = 1
14
+ if value.blank?
15
+ value = generate_content_id
16
+ else
17
+ value = strip_field(FIELD_NAME, value)
18
+ end
19
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
20
+ self.parse
21
+ self
22
+ end
23
+
24
+ def parse(val = value)
25
+ unless val.blank?
26
+ @element = Mail::MessageIdsElement.new(val)
27
+ end
28
+ end
29
+
30
+ def element
31
+ @element ||= Mail::MessageIdsElement.new(value)
32
+ end
33
+
34
+ def name
35
+ 'Content-ID'
36
+ end
37
+
38
+ def content_id
39
+ element.message_id
40
+ end
41
+
42
+ def to_s
43
+ "<#{content_id}>"
44
+ end
45
+
46
+ # TODO: Fix this up
47
+ def encoded
48
+ "#{CAPITALIZED_FIELD}: #{to_s}\r\n"
49
+ end
50
+
51
+ def decoded
52
+ "#{to_s}"
53
+ end
54
+
55
+ private
56
+
57
+ def generate_content_id
58
+ fqdn = ::Socket.gethostname
59
+ "<#{Mail.random_tag}@#{fqdn}.mail>"
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ #
3
+ #
4
+ #
5
+ module Mail
6
+ class ContentLocationField < StructuredField
7
+
8
+ FIELD_NAME = 'content-location'
9
+ CAPITALIZED_FIELD = 'Content-Location'
10
+
11
+ def initialize(value = nil, charset = 'utf-8')
12
+ self.charset = charset
13
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
14
+ self.parse
15
+ self
16
+ end
17
+
18
+ def parse(val = value)
19
+ unless val.blank?
20
+ @element = Mail::ContentLocationElement.new(val)
21
+ end
22
+ end
23
+
24
+ def element
25
+ @element ||= Mail::ContentLocationElement.new(value)
26
+ end
27
+
28
+ def location
29
+ element.location
30
+ end
31
+
32
+ # TODO: Fix this up
33
+ def encoded
34
+ "#{CAPITALIZED_FIELD}: #{location}\r\n"
35
+ end
36
+
37
+ def decoded
38
+ location
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+ #
3
+ #
4
+ #
5
+ module Mail
6
+ class ContentTransferEncodingField < StructuredField
7
+
8
+ FIELD_NAME = 'content-transfer-encoding'
9
+ CAPITALIZED_FIELD = 'Content-Transfer-Encoding'
10
+
11
+ def initialize(value = nil, charset = 'utf-8')
12
+ self.charset = charset
13
+ value = '7bit' if value.to_s =~ /7-bit/i
14
+ value = '8bit' if value.to_s =~ /8-bit/i
15
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
16
+ self.parse
17
+ self
18
+ end
19
+
20
+ def parse(val = value)
21
+ unless val.blank?
22
+ @element = Mail::ContentTransferEncodingElement.new(val)
23
+ end
24
+ end
25
+
26
+ def tree
27
+ STDERR.puts("tree is deprecated. Please use encoding to get parse result\n#{caller}")
28
+ @element ||= Mail::ContentTransferEncodingElement.new(value)
29
+ @tree ||= @element.tree
30
+ end
31
+
32
+ def element
33
+ @element ||= Mail::ContentTransferEncodingElement.new(value)
34
+ end
35
+
36
+ def encoding
37
+ element.encoding
38
+ end
39
+
40
+ # TODO: Fix this up
41
+ def encoded
42
+ "#{CAPITALIZED_FIELD}: #{encoding}\r\n"
43
+ end
44
+
45
+ def decoded
46
+ encoding
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,185 @@
1
+ # encoding: utf-8
2
+ require 'mail/fields/common/parameter_hash'
3
+
4
+ module Mail
5
+ class ContentTypeField < StructuredField
6
+
7
+ FIELD_NAME = 'content-type'
8
+ CAPITALIZED_FIELD = 'Content-Type'
9
+
10
+ def initialize(value = nil, charset = 'utf-8')
11
+ self.charset = charset
12
+ if value.class == Array
13
+ @main_type = value[0]
14
+ @sub_type = value[1]
15
+ @parameters = ParameterHash.new.merge!(value.last)
16
+ else
17
+ @main_type = nil
18
+ @sub_type = nil
19
+ @parameters = nil
20
+ value = strip_field(FIELD_NAME, value)
21
+ end
22
+ super(CAPITALIZED_FIELD, value, charset)
23
+ self.parse
24
+ self
25
+ end
26
+
27
+ def parse(val = value)
28
+ unless val.blank?
29
+ self.value = val
30
+ @element = nil
31
+ element
32
+ end
33
+ end
34
+
35
+ def element
36
+ begin
37
+ @element ||= Mail::ContentTypeElement.new(value)
38
+ rescue
39
+ attempt_to_clean
40
+ end
41
+ end
42
+
43
+ def attempt_to_clean
44
+ # Sanitize the value, handle special cases
45
+ @element ||= Mail::ContentTypeElement.new(sanatize(value))
46
+ rescue
47
+ # All else fails, just get the MIME media type
48
+ @element ||= Mail::ContentTypeElement.new(get_mime_type(value))
49
+ end
50
+
51
+ def main_type
52
+ @main_type ||= element.main_type
53
+ end
54
+
55
+ def sub_type
56
+ @sub_type ||= element.sub_type
57
+ end
58
+
59
+ def string
60
+ "#{main_type}/#{sub_type}"
61
+ end
62
+
63
+ def default
64
+ decoded
65
+ end
66
+
67
+ alias :content_type :string
68
+
69
+ def parameters
70
+ unless @parameters
71
+ @parameters = ParameterHash.new
72
+ element.parameters.each { |p| @parameters.merge!(p) }
73
+ end
74
+ @parameters
75
+ end
76
+
77
+ def ContentTypeField.with_boundary(type)
78
+ new("#{type}; boundary=#{generate_boundary}")
79
+ end
80
+
81
+ def ContentTypeField.generate_boundary
82
+ "--==_mimepart_#{Mail.random_tag}"
83
+ end
84
+
85
+ def value
86
+ if @value.class == Array
87
+ "#{@main_type}/#{@sub_type}; #{stringify(parameters)}"
88
+ else
89
+ @value
90
+ end
91
+ end
92
+
93
+ def stringify(params)
94
+ params.map { |k,v| "#{k}=#{Encodings.param_encode(v)}" }.join("; ")
95
+ end
96
+
97
+ def filename
98
+ case
99
+ when parameters['filename']
100
+ @filename = parameters['filename']
101
+ when parameters['name']
102
+ @filename = parameters['name']
103
+ else
104
+ @filename = nil
105
+ end
106
+ @filename
107
+ end
108
+
109
+ # TODO: Fix this up
110
+ def encoded
111
+ if parameters.length > 0
112
+ p = ";\r\n\t#{parameters.encoded}\r\n"
113
+ else
114
+ p = ""
115
+ end
116
+ "#{CAPITALIZED_FIELD}: #{content_type}" + p
117
+ end
118
+
119
+ def decoded
120
+ if parameters.length > 0
121
+ p = "; #{parameters.decoded}"
122
+ else
123
+ p = ""
124
+ end
125
+ "#{content_type}" + p
126
+ end
127
+
128
+ private
129
+
130
+ def method_missing(name, *args, &block)
131
+ if name.to_s =~ /([\w_]+)=/
132
+ self.parameters[$1] = args.first
133
+ @value = "#{content_type}; #{stringify(parameters)}"
134
+ else
135
+ super
136
+ end
137
+ end
138
+
139
+ # Various special cases from random emails found that I am not going to change
140
+ # the parser for
141
+ def sanatize( val )
142
+ case
143
+ when val.chomp =~ /^\s*([\w\d\-_]+)\/([\w\d\-_]+)\s*;;+(.*)$/i
144
+ # Handles 'text/plain;; format="flowed"' (double semi colon)
145
+ "#{$1}/#{$2}; #{$3}"
146
+ when val.chomp =~ /^\s*([\w\d\-_]+)\/([\w\d\-_]+)\s*;(ISO[\w\d\-_]+)$/i
147
+ # Microsoft helper:
148
+ # Handles 'type/subtype;ISO-8559-1'
149
+ "#{$1}/#{$2}; charset=#{quote_atom($3)}"
150
+ when val.chomp =~ /^text;?$/i
151
+ # Handles 'text;' and 'text'
152
+ "text/plain;"
153
+ when val.chomp =~ /^(\w+);\s(.*)$/i
154
+ # Handles 'text; <parameters>'
155
+ "text/plain; #{$2}"
156
+ when val =~ /([\w\d\-_]+\/[\w\d\-_]+);\scharset="charset="(\w+)""/i
157
+ # Handles text/html; charset="charset="GB2312""
158
+ "#{$1}; charset=#{quote_atom($2)}"
159
+ when val =~ /([\w\d\-_]+\/[\w\d\-_]+);\s+(.*)/i
160
+ type = $1
161
+ # Handles misquoted param values
162
+ # e.g: application/octet-stream; name=archiveshelp1[1].htm
163
+ # and: audio/x-midi;\r\n\tname=Part .exe
164
+ params = $2.to_s.split(/\s+/)
165
+ params = params.map { |i| i.to_s.chomp.strip }
166
+ params = params.map { |i| i.split(/\s*\=\s*/) }
167
+ params = params.map { |i| "#{i[0]}=#{dquote(i[1].to_s)}" }.join('; ')
168
+ "#{type}; #{params}"
169
+ when val =~ /^\s*$/
170
+ 'text/plain'
171
+ else
172
+ ''
173
+ end
174
+ end
175
+
176
+ def get_mime_type( val )
177
+ case
178
+ when val =~ /^([\w\d\-_]+)\/([\w\d\-_]+);.+$/i
179
+ "#{$1}/#{$2}"
180
+ else
181
+ 'text/plain'
182
+ end
183
+ end
184
+ end
185
+ end