mail 2.5.5 → 2.8.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 (191) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +170 -108
  4. data/lib/mail/attachments_list.rb +13 -10
  5. data/lib/mail/body.rb +105 -91
  6. data/lib/mail/check_delivery_params.rb +30 -22
  7. data/lib/mail/configuration.rb +3 -0
  8. data/lib/mail/constants.rb +79 -0
  9. data/lib/mail/elements/address.rb +118 -174
  10. data/lib/mail/elements/address_list.rb +16 -56
  11. data/lib/mail/elements/content_disposition_element.rb +12 -22
  12. data/lib/mail/elements/content_location_element.rb +9 -17
  13. data/lib/mail/elements/content_transfer_encoding_element.rb +8 -19
  14. data/lib/mail/elements/content_type_element.rb +20 -30
  15. data/lib/mail/elements/date_time_element.rb +10 -21
  16. data/lib/mail/elements/envelope_from_element.rb +23 -31
  17. data/lib/mail/elements/message_ids_element.rb +22 -20
  18. data/lib/mail/elements/mime_version_element.rb +10 -21
  19. data/lib/mail/elements/phrase_list.rb +13 -15
  20. data/lib/mail/elements/received_element.rb +26 -21
  21. data/lib/mail/elements.rb +1 -0
  22. data/lib/mail/encodings/7bit.rb +10 -14
  23. data/lib/mail/encodings/8bit.rb +5 -18
  24. data/lib/mail/encodings/base64.rb +15 -10
  25. data/lib/mail/encodings/binary.rb +4 -22
  26. data/lib/mail/encodings/identity.rb +24 -0
  27. data/lib/mail/encodings/quoted_printable.rb +13 -7
  28. data/lib/mail/encodings/transfer_encoding.rb +47 -28
  29. data/lib/mail/encodings/unix_to_unix.rb +20 -0
  30. data/lib/mail/encodings.rb +102 -93
  31. data/lib/mail/envelope.rb +12 -19
  32. data/lib/mail/field.rb +143 -71
  33. data/lib/mail/field_list.rb +73 -19
  34. data/lib/mail/fields/bcc_field.rb +42 -48
  35. data/lib/mail/fields/cc_field.rb +29 -50
  36. data/lib/mail/fields/comments_field.rb +28 -37
  37. data/lib/mail/fields/common_address_field.rb +170 -0
  38. data/lib/mail/fields/common_date_field.rb +58 -0
  39. data/lib/mail/fields/common_field.rb +77 -0
  40. data/lib/mail/fields/common_message_id_field.rb +42 -0
  41. data/lib/mail/fields/content_description_field.rb +8 -14
  42. data/lib/mail/fields/content_disposition_field.rb +20 -44
  43. data/lib/mail/fields/content_id_field.rb +25 -51
  44. data/lib/mail/fields/content_location_field.rb +12 -25
  45. data/lib/mail/fields/content_transfer_encoding_field.rb +31 -36
  46. data/lib/mail/fields/content_type_field.rb +51 -80
  47. data/lib/mail/fields/date_field.rb +24 -52
  48. data/lib/mail/fields/from_field.rb +29 -50
  49. data/lib/mail/fields/in_reply_to_field.rb +39 -49
  50. data/lib/mail/fields/keywords_field.rb +19 -32
  51. data/lib/mail/fields/message_id_field.rb +26 -71
  52. data/lib/mail/fields/mime_version_field.rb +20 -30
  53. data/lib/mail/fields/named_structured_field.rb +11 -0
  54. data/lib/mail/fields/named_unstructured_field.rb +11 -0
  55. data/lib/mail/fields/optional_field.rb +10 -7
  56. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +16 -13
  57. data/lib/mail/fields/received_field.rb +44 -57
  58. data/lib/mail/fields/references_field.rb +36 -49
  59. data/lib/mail/fields/reply_to_field.rb +29 -50
  60. data/lib/mail/fields/resent_bcc_field.rb +29 -50
  61. data/lib/mail/fields/resent_cc_field.rb +29 -50
  62. data/lib/mail/fields/resent_date_field.rb +6 -30
  63. data/lib/mail/fields/resent_from_field.rb +29 -50
  64. data/lib/mail/fields/resent_message_id_field.rb +6 -29
  65. data/lib/mail/fields/resent_sender_field.rb +28 -57
  66. data/lib/mail/fields/resent_to_field.rb +29 -50
  67. data/lib/mail/fields/return_path_field.rb +51 -55
  68. data/lib/mail/fields/sender_field.rb +35 -56
  69. data/lib/mail/fields/structured_field.rb +4 -30
  70. data/lib/mail/fields/subject_field.rb +10 -11
  71. data/lib/mail/fields/to_field.rb +29 -50
  72. data/lib/mail/fields/unstructured_field.rb +43 -51
  73. data/lib/mail/fields.rb +1 -0
  74. data/lib/mail/header.rb +78 -129
  75. data/lib/mail/indifferent_hash.rb +1 -0
  76. data/lib/mail/mail.rb +18 -11
  77. data/lib/mail/matchers/attachment_matchers.rb +44 -0
  78. data/lib/mail/matchers/has_sent_mail.rb +81 -4
  79. data/lib/mail/message.rb +142 -139
  80. data/lib/mail/multibyte/chars.rb +24 -180
  81. data/lib/mail/multibyte/unicode.rb +32 -27
  82. data/lib/mail/multibyte/utils.rb +27 -43
  83. data/lib/mail/multibyte.rb +56 -16
  84. data/lib/mail/network/delivery_methods/exim.rb +6 -4
  85. data/lib/mail/network/delivery_methods/file_delivery.rb +12 -10
  86. data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
  87. data/lib/mail/network/delivery_methods/sendmail.rb +63 -21
  88. data/lib/mail/network/delivery_methods/smtp.rb +76 -50
  89. data/lib/mail/network/delivery_methods/smtp_connection.rb +4 -4
  90. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -2
  91. data/lib/mail/network/retriever_methods/base.rb +9 -8
  92. data/lib/mail/network/retriever_methods/imap.rb +37 -18
  93. data/lib/mail/network/retriever_methods/pop3.rb +6 -3
  94. data/lib/mail/network/retriever_methods/test_retriever.rb +4 -2
  95. data/lib/mail/network.rb +2 -0
  96. data/lib/mail/parser_tools.rb +15 -0
  97. data/lib/mail/parsers/address_lists_parser.rb +33242 -0
  98. data/lib/mail/parsers/address_lists_parser.rl +179 -0
  99. data/lib/mail/parsers/content_disposition_parser.rb +901 -0
  100. data/lib/mail/parsers/content_disposition_parser.rl +89 -0
  101. data/lib/mail/parsers/content_location_parser.rb +822 -0
  102. data/lib/mail/parsers/content_location_parser.rl +78 -0
  103. data/lib/mail/parsers/content_transfer_encoding_parser.rb +522 -0
  104. data/lib/mail/parsers/content_transfer_encoding_parser.rl +71 -0
  105. data/lib/mail/parsers/content_type_parser.rb +1048 -0
  106. data/lib/mail/parsers/content_type_parser.rl +90 -0
  107. data/lib/mail/parsers/date_time_parser.rb +891 -0
  108. data/lib/mail/parsers/date_time_parser.rl +69 -0
  109. data/lib/mail/parsers/envelope_from_parser.rb +3675 -0
  110. data/lib/mail/parsers/envelope_from_parser.rl +89 -0
  111. data/lib/mail/parsers/message_ids_parser.rb +5161 -0
  112. data/lib/mail/parsers/message_ids_parser.rl +93 -0
  113. data/lib/mail/parsers/mime_version_parser.rb +513 -0
  114. data/lib/mail/parsers/mime_version_parser.rl +68 -0
  115. data/lib/mail/parsers/phrase_lists_parser.rb +884 -0
  116. data/lib/mail/parsers/phrase_lists_parser.rl +90 -0
  117. data/lib/mail/parsers/received_parser.rb +8782 -0
  118. data/lib/mail/parsers/received_parser.rl +91 -0
  119. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  120. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  121. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  122. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  123. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  124. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  125. data/lib/mail/parsers/rfc5322.rl +74 -0
  126. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  127. data/lib/mail/parsers/rfc5322_date_time.rl +37 -0
  128. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  129. data/lib/mail/parsers.rb +13 -0
  130. data/lib/mail/part.rb +11 -12
  131. data/lib/mail/parts_list.rb +90 -14
  132. data/lib/mail/smtp_envelope.rb +57 -0
  133. data/lib/mail/utilities.rb +415 -76
  134. data/lib/mail/values/unicode_tables.dat +0 -0
  135. data/lib/mail/version.rb +8 -15
  136. data/lib/mail/yaml.rb +30 -0
  137. data/lib/mail.rb +9 -32
  138. metadata +127 -79
  139. data/CHANGELOG.rdoc +0 -742
  140. data/CONTRIBUTING.md +0 -45
  141. data/Dependencies.txt +0 -3
  142. data/Gemfile +0 -32
  143. data/Rakefile +0 -21
  144. data/TODO.rdoc +0 -9
  145. data/lib/VERSION +0 -4
  146. data/lib/load_parsers.rb +0 -35
  147. data/lib/mail/core_extensions/nil.rb +0 -19
  148. data/lib/mail/core_extensions/object.rb +0 -13
  149. data/lib/mail/core_extensions/smtp.rb +0 -24
  150. data/lib/mail/core_extensions/string/access.rb +0 -145
  151. data/lib/mail/core_extensions/string/multibyte.rb +0 -78
  152. data/lib/mail/core_extensions/string.rb +0 -33
  153. data/lib/mail/fields/common/address_container.rb +0 -16
  154. data/lib/mail/fields/common/common_address.rb +0 -140
  155. data/lib/mail/fields/common/common_date.rb +0 -42
  156. data/lib/mail/fields/common/common_field.rb +0 -57
  157. data/lib/mail/fields/common/common_message_id.rb +0 -48
  158. data/lib/mail/multibyte/exceptions.rb +0 -8
  159. data/lib/mail/parsers/address_lists.rb +0 -64
  160. data/lib/mail/parsers/address_lists.treetop +0 -19
  161. data/lib/mail/parsers/content_disposition.rb +0 -535
  162. data/lib/mail/parsers/content_disposition.treetop +0 -46
  163. data/lib/mail/parsers/content_location.rb +0 -139
  164. data/lib/mail/parsers/content_location.treetop +0 -20
  165. data/lib/mail/parsers/content_transfer_encoding.rb +0 -201
  166. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
  167. data/lib/mail/parsers/content_type.rb +0 -971
  168. data/lib/mail/parsers/content_type.treetop +0 -68
  169. data/lib/mail/parsers/date_time.rb +0 -114
  170. data/lib/mail/parsers/date_time.treetop +0 -11
  171. data/lib/mail/parsers/envelope_from.rb +0 -194
  172. data/lib/mail/parsers/envelope_from.treetop +0 -32
  173. data/lib/mail/parsers/message_ids.rb +0 -45
  174. data/lib/mail/parsers/message_ids.treetop +0 -15
  175. data/lib/mail/parsers/mime_version.rb +0 -144
  176. data/lib/mail/parsers/mime_version.treetop +0 -19
  177. data/lib/mail/parsers/phrase_lists.rb +0 -45
  178. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  179. data/lib/mail/parsers/received.rb +0 -71
  180. data/lib/mail/parsers/received.treetop +0 -11
  181. data/lib/mail/parsers/rfc2045.rb +0 -421
  182. data/lib/mail/parsers/rfc2045.treetop +0 -35
  183. data/lib/mail/parsers/rfc2822.rb +0 -5397
  184. data/lib/mail/parsers/rfc2822.treetop +0 -408
  185. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  186. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  187. data/lib/mail/patterns.rb +0 -35
  188. data/lib/mail/version_specific/ruby_1_8.rb +0 -119
  189. data/lib/mail/version_specific/ruby_1_9.rb +0 -147
  190. data/lib/tasks/corpus.rake +0 -125
  191. data/lib/tasks/treetop.rake +0 -10
@@ -1,408 +0,0 @@
1
- module Mail
2
- grammar RFC2822
3
-
4
- include RFC2822Obsolete
5
-
6
- rule ALPHA
7
- [a-zA-Z]
8
- end
9
-
10
- rule DIGIT
11
- [0-9]
12
- end
13
-
14
- rule DQUOTE
15
- '"'
16
- end
17
-
18
- rule LF
19
- "\n"
20
- end
21
-
22
- rule CR
23
- "\r"
24
- end
25
-
26
- rule CRLF
27
- "\r\n"
28
- end
29
-
30
- rule WSP
31
- [\x09\x20]
32
- end
33
-
34
- rule FWS # Folding white space
35
- (WSP* CRLF WSP+) / (CRLF WSP+) / obs_FWS
36
- end
37
-
38
- rule CFWS
39
- (FWS* comment)* FWS?
40
- end
41
-
42
- rule NO_WS_CTL
43
- [\x01-\x08] / # US-ASCII control characters
44
- [\x0B-\x0C] / # that do not include the
45
- [\x0E-\x1F] / # carriage return, line feed,
46
- [\x7f] # and white space characters
47
- end
48
-
49
- rule specials
50
- "(" / ")" / # Special characters used in
51
- "<" / ">" / # other parts of the syntax
52
- "[" / "]" /
53
- ":" / ";" /
54
- "@" / '\\' /
55
- "," / "." /
56
- DQUOTE
57
- end
58
-
59
- rule ctext
60
- NO_WS_CTL / # Non white space controls
61
- [\x21-\x27] / # The rest of the US-ASCII
62
- [\x2a-\x5b] / # characters not including "(",
63
- [\x5d-\x7e] # ")", or "\"
64
- end
65
-
66
- rule ccontent
67
- ctext / quoted_pair / comment
68
- end
69
-
70
- rule comment
71
- "(" ( FWS? ccontent )* FWS? ")"
72
- end
73
-
74
- rule atext
75
- ALPHA / DIGIT / # Any character except controls,
76
- "!" / "#" / # SP, and specials.
77
- "$" / "%" / # Used for atoms
78
- "&" / "'" /
79
- "*" / "+" /
80
- "-" / "/" /
81
- "=" / "?" /
82
- "^" / "_" /
83
- "`" / "{" /
84
- "|" / "}" /
85
- "~"
86
- end
87
-
88
- rule mtext
89
- (atext / ".")+
90
- end
91
-
92
- rule atom
93
- CFWS? atext+ CFWS?
94
- end
95
-
96
- rule dot_atom
97
- CFWS? dot_atom_text CFWS?
98
- end
99
-
100
- rule local_dot_atom
101
- CFWS? local_dot_atom_text CFWS?
102
- end
103
-
104
- rule message_id_text
105
- mtext+
106
- end
107
-
108
- rule dot_atom_text
109
- (domain_text "."?)+
110
- end
111
-
112
- rule local_dot_atom_text
113
- ("."* domain_text "."*)+
114
- end
115
-
116
- rule domain_text
117
- (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / atext+
118
- end
119
-
120
- rule quoted_domain
121
- qdcontent / "\\" text
122
- end
123
-
124
- rule qdcontent
125
- NO_WS_CTL / # Non white space controls
126
- [\x21] / # The rest of the US-ASCII
127
- [\x23-\x45] / # characters not including "\"
128
- [\x47-\x5b] / # or the "." or the
129
- [\x5d-\x7e] # double quote character
130
- end
131
-
132
- rule phrase
133
- obs_phrase / word+
134
- end
135
-
136
- rule word
137
- atom / quoted_string
138
- end
139
-
140
- rule phrase_list
141
- first_phrase:phrase other_phrases:("," FWS* phrase_value:phrase)*
142
- end
143
-
144
- rule domain_literal
145
- CFWS? "[" (FWS? dcontent)* FWS? "]" CFWS?
146
- end
147
-
148
- rule dcontent
149
- dtext / quoted_pair
150
- end
151
-
152
- rule dtext
153
- NO_WS_CTL / # Non white space controls
154
- [\x21-\x5a] / # The rest of the US-ASCII characters
155
- [\x5e-\x7e] # not including "[", "]", or "\"
156
- end
157
-
158
- rule angle_addr
159
- CFWS? "<" addr_spec ">" CFWS? / obs_angle_addr
160
- end
161
-
162
- rule addr_spec
163
- (local_part "@" domain) / local_part
164
- end
165
-
166
- rule local_part
167
- local_dot_atom / quoted_string / obs_local_part
168
- end
169
-
170
- rule domain
171
- dot_atom / domain_literal / obs_domain
172
- end
173
-
174
- rule group
175
- group_name:display_name ":" group_list:(mailbox_list_group / CFWS)? ";" CFWS?
176
- end
177
-
178
- rule mailbox_list_group
179
- mailbox_list {
180
- def addresses
181
- [first_addr] + other_addr.elements.map { |o| o.addr_value }
182
- end
183
- }
184
- end
185
-
186
- rule quoted_string
187
- CFWS? DQUOTE quoted_content:(FWS? qcontent)* FWS? DQUOTE CFWS?
188
- end
189
-
190
- rule qcontent
191
- qtext / quoted_pair
192
- end
193
-
194
- rule quoted_pair
195
- ("\\" text) / obs_qp
196
- end
197
-
198
- rule qtext
199
- NO_WS_CTL / # Non white space controls
200
- [\x21] / # The rest of the US-ASCII
201
- [\x23-\x5b] / # characters not including "\"
202
- [\x5d-\x7e] # or the quote character
203
- end
204
-
205
- rule text
206
- [\x01-\x09] / # Characters excluding CR and LF
207
- [\x0b-\x0c] /
208
- [\x0e-\x7e] /
209
- obs_text
210
- end
211
-
212
- rule display_name
213
- phrase
214
- end
215
-
216
- rule name_addr
217
- display_name angle_addr / angle_addr
218
- end
219
-
220
- rule mailbox_list
221
- (first_addr:mailbox other_addr:(("," / ";") addr_value:mailbox)*) / obs_mbox_list
222
- end
223
-
224
- rule mailbox
225
- (name_addr / addr_spec) {
226
- def dig_comments(comments, elements)
227
- elements.each { |elem|
228
- if elem.respond_to?(:comment)
229
- comments << elem.comment
230
- end
231
- dig_comments(comments, elem.elements) if elem.elements
232
- }
233
- end
234
-
235
- def comments
236
- comments = []
237
- dig_comments(comments, elements)
238
- comments
239
- end
240
- }
241
- end
242
-
243
- rule address
244
- group {
245
-
246
- def dig_comments(comments, elements)
247
- elements.each { |elem|
248
- if elem.respond_to?(:comment)
249
- comments << elem.comment
250
- end
251
- dig_comments(comments, elem.elements) if elem.elements
252
- }
253
- end
254
-
255
- def comments
256
- comments = []
257
- dig_comments(comments, elements)
258
- comments
259
- end
260
-
261
- } /
262
- mailbox
263
- end
264
-
265
- rule address_list
266
- first_addr:address? other_addr:(FWS* ("," / ";") FWS* addr_value:address?)*
267
- end
268
-
269
- rule date_time
270
- ( day_of_week ",")? date FWS time CFWS?
271
- end
272
-
273
- rule day_of_week
274
- (FWS? day_name) / obs_day_of_week
275
- end
276
-
277
- rule day_name
278
- "Mon" / "Tue" / "Wed" / "Thu" /
279
- "Fri" / "Sat" / "Sun"
280
- end
281
-
282
- rule date
283
- day month year
284
- end
285
-
286
- rule year
287
- DIGIT DIGIT DIGIT DIGIT / obs_year
288
- end
289
-
290
- rule month
291
- (FWS month_name FWS) / obs_month
292
- end
293
-
294
- rule month_name
295
- "Jan" / "Feb" / "Mar" / "Apr" /
296
- "May" / "Jun" / "Jul" / "Aug" /
297
- "Sep" / "Oct" / "Nov" / "Dec"
298
- end
299
-
300
- rule day
301
- (FWS? DIGIT DIGIT?) / obs_day
302
- end
303
-
304
- rule time
305
- time_of_day FWS zone
306
- end
307
-
308
- rule time_of_day
309
- hour ":" minute ( ":" second )?
310
- end
311
-
312
- rule hour
313
- DIGIT DIGIT / obs_hour
314
- end
315
-
316
- rule minute
317
- DIGIT DIGIT / obs_minute
318
- end
319
-
320
- rule second
321
- DIGIT DIGIT / obs_second
322
- end
323
-
324
- rule zone
325
- (( "+" / "-" ) DIGIT DIGIT DIGIT DIGIT) / obs_zone
326
- end
327
-
328
- rule return
329
- path CRLF
330
- end
331
-
332
- rule path
333
- ((CFWS)? "<" ((CFWS)? / addr_spec) ">" (CFWS)?) / obs_path
334
- end
335
-
336
- rule received
337
- name_val_list ";" date_time CRLF
338
- end
339
-
340
- rule name_val_list
341
- (CFWS)? (name_val_pair (CFWS name_val_pair)*)?
342
- end
343
-
344
- rule name_val_pair
345
- item_name CFWS item_value
346
- end
347
-
348
- rule item_name
349
- ALPHA (("-")? (ALPHA / DIGIT))*
350
- end
351
-
352
- rule item_value
353
- (angle_addr)+ / addr_spec / atom / domain / msg_id
354
- end
355
-
356
- rule message_ids
357
- first_msg_id:msg_id other_msg_ids:( CFWS msg_id_value:msg_id )*
358
- end
359
-
360
- rule msg_id
361
- (CFWS)? "<" msg_id_value ">" (CFWS)?
362
- end
363
-
364
- rule msg_id_value
365
- id_left "@" id_right
366
- end
367
-
368
- rule id_left
369
- message_id_text / no_fold_quote / obs_id_left
370
- end
371
-
372
- rule id_right
373
- msg_id_dot_atom_text / no_fold_literal / obs_id_right
374
- end
375
-
376
- rule msg_id_dot_atom_text
377
- (msg_id_domain_text "."?)+
378
- end
379
-
380
- rule msg_id_domain_text
381
- (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / msg_id_atext+
382
- end
383
-
384
- rule msg_id_atext
385
- ALPHA / DIGIT / # Any character except controls,
386
- "!" / "#" / # SP, and specials.
387
- "$" / "%" / # Used for atoms
388
- "&" / "'" /
389
- "*" / "+" /
390
- "-" / "/" /
391
- "=" / "?" /
392
- "^" / "_" /
393
- "`" / "{" /
394
- "|" / "}" /
395
- "~" / "@"
396
- end
397
-
398
- rule no_fold_quote
399
- DQUOTE (qtext / quoted_pair)+ DQUOTE
400
- end
401
-
402
- rule no_fold_literal
403
- "[" (dtext / quoted_pair)+ "]"
404
- end
405
-
406
-
407
- end
408
- end