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