dball-mail 2.2.9.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 (122) hide show
  1. data/CHANGELOG.rdoc +459 -0
  2. data/README.rdoc +582 -0
  3. data/Rakefile +66 -0
  4. data/TODO.rdoc +9 -0
  5. data/lib/VERSION +4 -0
  6. data/lib/mail/attachments_list.rb +105 -0
  7. data/lib/mail/body.rb +286 -0
  8. data/lib/mail/configuration.rb +71 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +27 -0
  11. data/lib/mail/elements/address.rb +306 -0
  12. data/lib/mail/elements/address_list.rb +74 -0
  13. data/lib/mail/elements/content_disposition_element.rb +30 -0
  14. data/lib/mail/elements/content_location_element.rb +25 -0
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
  16. data/lib/mail/elements/content_type_element.rb +35 -0
  17. data/lib/mail/elements/date_time_element.rb +26 -0
  18. data/lib/mail/elements/envelope_from_element.rb +34 -0
  19. data/lib/mail/elements/message_ids_element.rb +29 -0
  20. data/lib/mail/elements/mime_version_element.rb +26 -0
  21. data/lib/mail/elements/phrase_list.rb +21 -0
  22. data/lib/mail/elements/received_element.rb +30 -0
  23. data/lib/mail/elements.rb +14 -0
  24. data/lib/mail/encodings/7bit.rb +31 -0
  25. data/lib/mail/encodings/8bit.rb +31 -0
  26. data/lib/mail/encodings/base64.rb +33 -0
  27. data/lib/mail/encodings/binary.rb +31 -0
  28. data/lib/mail/encodings/quoted_printable.rb +38 -0
  29. data/lib/mail/encodings/transfer_encoding.rb +58 -0
  30. data/lib/mail/encodings.rb +268 -0
  31. data/lib/mail/envelope.rb +35 -0
  32. data/lib/mail/field.rb +223 -0
  33. data/lib/mail/field_list.rb +33 -0
  34. data/lib/mail/fields/bcc_field.rb +56 -0
  35. data/lib/mail/fields/cc_field.rb +55 -0
  36. data/lib/mail/fields/comments_field.rb +41 -0
  37. data/lib/mail/fields/common/address_container.rb +16 -0
  38. data/lib/mail/fields/common/common_address.rb +125 -0
  39. data/lib/mail/fields/common/common_date.rb +42 -0
  40. data/lib/mail/fields/common/common_field.rb +50 -0
  41. data/lib/mail/fields/common/common_message_id.rb +44 -0
  42. data/lib/mail/fields/common/parameter_hash.rb +58 -0
  43. data/lib/mail/fields/content_description_field.rb +19 -0
  44. data/lib/mail/fields/content_disposition_field.rb +69 -0
  45. data/lib/mail/fields/content_id_field.rb +63 -0
  46. data/lib/mail/fields/content_location_field.rb +42 -0
  47. data/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
  48. data/lib/mail/fields/content_type_field.rb +198 -0
  49. data/lib/mail/fields/date_field.rb +55 -0
  50. data/lib/mail/fields/from_field.rb +55 -0
  51. data/lib/mail/fields/in_reply_to_field.rb +55 -0
  52. data/lib/mail/fields/keywords_field.rb +44 -0
  53. data/lib/mail/fields/message_id_field.rb +83 -0
  54. data/lib/mail/fields/mime_version_field.rb +53 -0
  55. data/lib/mail/fields/optional_field.rb +13 -0
  56. data/lib/mail/fields/received_field.rb +67 -0
  57. data/lib/mail/fields/references_field.rb +55 -0
  58. data/lib/mail/fields/reply_to_field.rb +55 -0
  59. data/lib/mail/fields/resent_bcc_field.rb +55 -0
  60. data/lib/mail/fields/resent_cc_field.rb +55 -0
  61. data/lib/mail/fields/resent_date_field.rb +35 -0
  62. data/lib/mail/fields/resent_from_field.rb +55 -0
  63. data/lib/mail/fields/resent_message_id_field.rb +34 -0
  64. data/lib/mail/fields/resent_sender_field.rb +62 -0
  65. data/lib/mail/fields/resent_to_field.rb +55 -0
  66. data/lib/mail/fields/return_path_field.rb +64 -0
  67. data/lib/mail/fields/sender_field.rb +67 -0
  68. data/lib/mail/fields/structured_field.rb +51 -0
  69. data/lib/mail/fields/subject_field.rb +16 -0
  70. data/lib/mail/fields/to_field.rb +55 -0
  71. data/lib/mail/fields/unstructured_field.rb +179 -0
  72. data/lib/mail/fields.rb +35 -0
  73. data/lib/mail/header.rb +264 -0
  74. data/lib/mail/mail.rb +255 -0
  75. data/lib/mail/message.rb +1972 -0
  76. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  77. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  78. data/lib/mail/network/delivery_methods/smtp.rb +136 -0
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  80. data/lib/mail/network/retriever_methods/imap.rb +213 -0
  81. data/lib/mail/network/retriever_methods/pop3.rb +194 -0
  82. data/lib/mail/network/retriever_methods/test_retriever.rb +31 -0
  83. data/lib/mail/network.rb +10 -0
  84. data/lib/mail/parsers/address_lists.rb +64 -0
  85. data/lib/mail/parsers/address_lists.treetop +19 -0
  86. data/lib/mail/parsers/content_disposition.rb +535 -0
  87. data/lib/mail/parsers/content_disposition.treetop +46 -0
  88. data/lib/mail/parsers/content_location.rb +139 -0
  89. data/lib/mail/parsers/content_location.treetop +20 -0
  90. data/lib/mail/parsers/content_transfer_encoding.rb +162 -0
  91. data/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
  92. data/lib/mail/parsers/content_type.rb +967 -0
  93. data/lib/mail/parsers/content_type.treetop +68 -0
  94. data/lib/mail/parsers/date_time.rb +114 -0
  95. data/lib/mail/parsers/date_time.treetop +11 -0
  96. data/lib/mail/parsers/envelope_from.rb +194 -0
  97. data/lib/mail/parsers/envelope_from.treetop +32 -0
  98. data/lib/mail/parsers/message_ids.rb +45 -0
  99. data/lib/mail/parsers/message_ids.treetop +15 -0
  100. data/lib/mail/parsers/mime_version.rb +144 -0
  101. data/lib/mail/parsers/mime_version.treetop +19 -0
  102. data/lib/mail/parsers/phrase_lists.rb +45 -0
  103. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  104. data/lib/mail/parsers/received.rb +71 -0
  105. data/lib/mail/parsers/received.treetop +11 -0
  106. data/lib/mail/parsers/rfc2045.rb +464 -0
  107. data/lib/mail/parsers/rfc2045.treetop +36 -0
  108. data/lib/mail/parsers/rfc2822.rb +5318 -0
  109. data/lib/mail/parsers/rfc2822.treetop +410 -0
  110. data/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
  111. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  112. data/lib/mail/part.rb +116 -0
  113. data/lib/mail/parts_list.rb +43 -0
  114. data/lib/mail/patterns.rb +34 -0
  115. data/lib/mail/utilities.rb +211 -0
  116. data/lib/mail/version.rb +24 -0
  117. data/lib/mail/version_specific/ruby_1_8.rb +97 -0
  118. data/lib/mail/version_specific/ruby_1_9.rb +87 -0
  119. data/lib/mail.rb +80 -0
  120. data/lib/tasks/corpus.rake +125 -0
  121. data/lib/tasks/treetop.rake +10 -0
  122. metadata +255 -0
@@ -0,0 +1,410 @@
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
+ end
227
+
228
+ rule address
229
+ group {
230
+
231
+ def dig_comments(comments, elements)
232
+ elements.each { |elem|
233
+ if elem.respond_to?(:comment)
234
+ comments << elem.comment
235
+ end
236
+ dig_comments(comments, elem.elements) if elem.elements
237
+ }
238
+ end
239
+
240
+ def comments
241
+ comments = []
242
+ dig_comments(comments, elements)
243
+ comments
244
+ end
245
+
246
+ } /
247
+ mailbox {
248
+
249
+ def dig_comments(comments, elements)
250
+ elements.each { |elem|
251
+ if elem.respond_to?(:comment)
252
+ comments << elem.comment
253
+ end
254
+ dig_comments(comments, elem.elements) if elem.elements
255
+ }
256
+ end
257
+
258
+ def comments
259
+ comments = []
260
+ dig_comments(comments, elements)
261
+ comments
262
+ end
263
+
264
+ }
265
+ end
266
+
267
+ rule address_list
268
+ first_addr:address other_addr:("," FWS* addr_value:address)*
269
+ end
270
+
271
+ rule date_time
272
+ ( day_of_week ",")? date FWS time CFWS?
273
+ end
274
+
275
+ rule day_of_week
276
+ (FWS? day_name) / obs_day_of_week
277
+ end
278
+
279
+ rule day_name
280
+ "Mon" / "Tue" / "Wed" / "Thu" /
281
+ "Fri" / "Sat" / "Sun"
282
+ end
283
+
284
+ rule date
285
+ day month year
286
+ end
287
+
288
+ rule year
289
+ DIGIT DIGIT DIGIT DIGIT / obs_year
290
+ end
291
+
292
+ rule month
293
+ (FWS month_name FWS) / obs_month
294
+ end
295
+
296
+ rule month_name
297
+ "Jan" / "Feb" / "Mar" / "Apr" /
298
+ "May" / "Jun" / "Jul" / "Aug" /
299
+ "Sep" / "Oct" / "Nov" / "Dec"
300
+ end
301
+
302
+ rule day
303
+ (FWS? DIGIT DIGIT?) / obs_day
304
+ end
305
+
306
+ rule time
307
+ time_of_day FWS zone
308
+ end
309
+
310
+ rule time_of_day
311
+ hour ":" minute ( ":" second )?
312
+ end
313
+
314
+ rule hour
315
+ DIGIT DIGIT / obs_hour
316
+ end
317
+
318
+ rule minute
319
+ DIGIT DIGIT / obs_minute
320
+ end
321
+
322
+ rule second
323
+ DIGIT DIGIT / obs_second
324
+ end
325
+
326
+ rule zone
327
+ (( "+" / "-" ) DIGIT DIGIT DIGIT DIGIT) / obs_zone
328
+ end
329
+
330
+ rule return
331
+ path CRLF
332
+ end
333
+
334
+ rule path
335
+ ((CFWS)? "<" ((CFWS)? / addr_spec) ">" (CFWS)?) / obs_path
336
+ end
337
+
338
+ rule received
339
+ name_val_list ";" date_time CRLF
340
+ end
341
+
342
+ rule name_val_list
343
+ (CFWS)? (name_val_pair (CFWS name_val_pair)*)
344
+ end
345
+
346
+ rule name_val_pair
347
+ item_name CFWS item_value
348
+ end
349
+
350
+ rule item_name
351
+ ALPHA (("-")? (ALPHA / DIGIT))*
352
+ end
353
+
354
+ rule item_value
355
+ (angle_addr)+ / addr_spec / atom / domain / msg_id
356
+ end
357
+
358
+ rule message_ids
359
+ first_msg_id:msg_id other_msg_ids:( CFWS msg_id_value:msg_id )*
360
+ end
361
+
362
+ rule msg_id
363
+ (CFWS)? "<" msg_id_value ">" (CFWS)?
364
+ end
365
+
366
+ rule msg_id_value
367
+ id_left "@" id_right
368
+ end
369
+
370
+ rule id_left
371
+ message_id_text / no_fold_quote / obs_id_left
372
+ end
373
+
374
+ rule id_right
375
+ msg_id_dot_atom_text / no_fold_literal / obs_id_right
376
+ end
377
+
378
+ rule msg_id_dot_atom_text
379
+ (msg_id_domain_text "."?)+
380
+ end
381
+
382
+ rule msg_id_domain_text
383
+ (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / msg_id_atext+
384
+ end
385
+
386
+ rule msg_id_atext
387
+ ALPHA / DIGIT / # Any character except controls,
388
+ "!" / "#" / # SP, and specials.
389
+ "$" / "%" / # Used for atoms
390
+ "&" / "'" /
391
+ "*" / "+" /
392
+ "-" / "/" /
393
+ "=" / "?" /
394
+ "^" / "_" /
395
+ "`" / "{" /
396
+ "|" / "}" /
397
+ "~" / "@"
398
+ end
399
+
400
+ rule no_fold_quote
401
+ DQUOTE (qtext / quoted_pair)+ DQUOTE
402
+ end
403
+
404
+ rule no_fold_literal
405
+ "[" (dtext / quoted_pair)+ "]"
406
+ end
407
+
408
+
409
+ end
410
+ end