mail 2.5.4 → 2.6.0

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. checksums.yaml +7 -0
  2. data/CHANGELOG.rdoc +7 -2
  3. data/CONTRIBUTING.md +13 -0
  4. data/Dependencies.txt +0 -1
  5. data/Gemfile +9 -7
  6. data/README.md +41 -21
  7. data/Rakefile +10 -2
  8. data/VERSION +4 -0
  9. data/lib/mail/body.rb +2 -2
  10. data/lib/mail/core_extensions/string.rb +12 -2
  11. data/lib/mail/elements/address.rb +38 -82
  12. data/lib/mail/elements/address_list.rb +19 -42
  13. data/lib/mail/elements/content_disposition_element.rb +3 -7
  14. data/lib/mail/elements/content_location_element.rb +2 -6
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +3 -10
  16. data/lib/mail/elements/content_type_element.rb +4 -8
  17. data/lib/mail/elements/date_time_element.rb +3 -7
  18. data/lib/mail/elements/envelope_from_element.rb +3 -11
  19. data/lib/mail/elements/message_ids_element.rb +1 -6
  20. data/lib/mail/elements/mime_version_element.rb +3 -7
  21. data/lib/mail/elements/phrase_list.rb +2 -7
  22. data/lib/mail/elements/received_element.rb +3 -7
  23. data/lib/mail/encodings.rb +0 -1
  24. data/lib/mail/envelope.rb +0 -5
  25. data/lib/mail/field.rb +53 -17
  26. data/lib/mail/field_list.rb +18 -18
  27. data/lib/mail/fields/common/common_address.rb +15 -20
  28. data/lib/mail/fields/common/common_date.rb +0 -7
  29. data/lib/mail/fields/common/common_field.rb +1 -1
  30. data/lib/mail/fields/content_transfer_encoding_field.rb +0 -6
  31. data/lib/mail/fields/resent_sender_field.rb +1 -1
  32. data/lib/mail/fields/sender_field.rb +1 -1
  33. data/lib/mail/fields/unstructured_field.rb +7 -1
  34. data/lib/mail/header.rb +8 -22
  35. data/lib/mail/mail.rb +12 -0
  36. data/lib/mail/matchers/has_sent_mail.rb +34 -1
  37. data/lib/mail/message.rb +18 -11
  38. data/lib/mail/multibyte/unicode.rb +1 -1
  39. data/lib/mail/network/delivery_methods/sendmail.rb +1 -1
  40. data/lib/mail/network/delivery_methods/smtp.rb +5 -9
  41. data/lib/mail/network/retriever_methods/imap.rb +18 -13
  42. data/lib/mail/parsers/address_lists_parser.rb +132 -0
  43. data/lib/mail/parsers/content_disposition_parser.rb +67 -0
  44. data/lib/mail/parsers/content_location_parser.rb +35 -0
  45. data/lib/mail/parsers/content_transfer_encoding_parser.rb +33 -0
  46. data/lib/mail/parsers/content_type_parser.rb +64 -0
  47. data/lib/mail/parsers/date_time_parser.rb +36 -0
  48. data/lib/mail/parsers/envelope_from_parser.rb +45 -0
  49. data/lib/mail/parsers/message_ids_parser.rb +39 -0
  50. data/lib/mail/parsers/mime_version_parser.rb +41 -0
  51. data/lib/mail/parsers/phrase_lists_parser.rb +33 -0
  52. data/lib/mail/parsers/ragel/common.rl +184 -0
  53. data/lib/mail/parsers/ragel/date_time.rl +30 -0
  54. data/lib/mail/parsers/ragel/parser_info.rb +61 -0
  55. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +14864 -0
  56. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +37 -0
  57. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +751 -0
  58. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +37 -0
  59. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +614 -0
  60. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +37 -0
  61. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +447 -0
  62. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +37 -0
  63. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +825 -0
  64. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +37 -0
  65. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +817 -0
  66. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +37 -0
  67. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +2129 -0
  68. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +37 -0
  69. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +1570 -0
  70. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +37 -0
  71. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +440 -0
  72. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +37 -0
  73. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +564 -0
  74. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +37 -0
  75. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +51 -0
  76. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +5144 -0
  77. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +37 -0
  78. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +37 -0
  79. data/lib/mail/parsers/ragel/ruby.rb +29 -0
  80. data/lib/mail/parsers/ragel.rb +17 -0
  81. data/lib/mail/parsers/received_parser.rb +47 -0
  82. data/lib/mail/parsers.rb +26 -0
  83. data/lib/mail/parts_list.rb +5 -3
  84. data/lib/mail/patterns.rb +3 -1
  85. data/lib/mail/utilities.rb +3 -1
  86. data/lib/mail/version.rb +1 -1
  87. data/lib/mail/version_specific/ruby_1_8.rb +1 -1
  88. data/lib/mail/version_specific/ruby_1_9.rb +16 -1
  89. data/lib/mail.rb +1 -1
  90. metadata +77 -87
  91. data/lib/VERSION +0 -4
  92. data/lib/load_parsers.rb +0 -35
  93. data/lib/mail/parsers/address_lists.rb +0 -64
  94. data/lib/mail/parsers/address_lists.treetop +0 -19
  95. data/lib/mail/parsers/content_disposition.rb +0 -535
  96. data/lib/mail/parsers/content_disposition.treetop +0 -46
  97. data/lib/mail/parsers/content_location.rb +0 -139
  98. data/lib/mail/parsers/content_location.treetop +0 -20
  99. data/lib/mail/parsers/content_transfer_encoding.rb +0 -201
  100. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
  101. data/lib/mail/parsers/content_type.rb +0 -971
  102. data/lib/mail/parsers/content_type.treetop +0 -68
  103. data/lib/mail/parsers/date_time.rb +0 -114
  104. data/lib/mail/parsers/date_time.treetop +0 -11
  105. data/lib/mail/parsers/envelope_from.rb +0 -194
  106. data/lib/mail/parsers/envelope_from.treetop +0 -32
  107. data/lib/mail/parsers/message_ids.rb +0 -45
  108. data/lib/mail/parsers/message_ids.treetop +0 -15
  109. data/lib/mail/parsers/mime_version.rb +0 -144
  110. data/lib/mail/parsers/mime_version.treetop +0 -19
  111. data/lib/mail/parsers/phrase_lists.rb +0 -45
  112. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  113. data/lib/mail/parsers/received.rb +0 -71
  114. data/lib/mail/parsers/received.treetop +0 -11
  115. data/lib/mail/parsers/rfc2045.rb +0 -421
  116. data/lib/mail/parsers/rfc2045.treetop +0 -35
  117. data/lib/mail/parsers/rfc2822.rb +0 -5397
  118. data/lib/mail/parsers/rfc2822.treetop +0 -408
  119. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  120. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  121. data/lib/tasks/corpus.rake +0 -125
  122. data/lib/tasks/treetop.rake +0 -10
@@ -1,139 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- module Mail
5
- module ContentLocation
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :primary
10
- end
11
-
12
- include RFC2822
13
-
14
- include RFC2045
15
-
16
- module Primary0
17
- def CFWS1
18
- elements[0]
19
- end
20
-
21
- def location
22
- elements[1]
23
- end
24
-
25
- def CFWS2
26
- elements[2]
27
- end
28
- end
29
-
30
- def _nt_primary
31
- start_index = index
32
- if node_cache[:primary].has_key?(index)
33
- cached = node_cache[:primary][index]
34
- if cached
35
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
36
- @index = cached.interval.end
37
- end
38
- return cached
39
- end
40
-
41
- i0, s0 = index, []
42
- r1 = _nt_CFWS
43
- s0 << r1
44
- if r1
45
- r2 = _nt_location
46
- s0 << r2
47
- if r2
48
- r3 = _nt_CFWS
49
- s0 << r3
50
- end
51
- end
52
- if s0.last
53
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
54
- r0.extend(Primary0)
55
- else
56
- @index = i0
57
- r0 = nil
58
- end
59
-
60
- node_cache[:primary][start_index] = r0
61
-
62
- r0
63
- end
64
-
65
- module Location0
66
- def text_value
67
- quoted_content.text_value
68
- end
69
- end
70
-
71
- def _nt_location
72
- start_index = index
73
- if node_cache[:location].has_key?(index)
74
- cached = node_cache[:location][index]
75
- if cached
76
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
77
- @index = cached.interval.end
78
- end
79
- return cached
80
- end
81
-
82
- i0 = index
83
- r1 = _nt_quoted_string
84
- r1.extend(Location0)
85
- if r1
86
- r0 = r1
87
- else
88
- s2, i2 = [], index
89
- loop do
90
- i3 = index
91
- r4 = _nt_token
92
- if r4
93
- r3 = r4
94
- else
95
- if has_terminal?('\G[\\x3d]', true, index)
96
- r5 = true
97
- @index += 1
98
- else
99
- r5 = nil
100
- end
101
- if r5
102
- r3 = r5
103
- else
104
- @index = i3
105
- r3 = nil
106
- end
107
- end
108
- if r3
109
- s2 << r3
110
- else
111
- break
112
- end
113
- end
114
- if s2.empty?
115
- @index = i2
116
- r2 = nil
117
- else
118
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
119
- end
120
- if r2
121
- r0 = r2
122
- else
123
- @index = i0
124
- r0 = nil
125
- end
126
- end
127
-
128
- node_cache[:location][start_index] = r0
129
-
130
- r0
131
- end
132
-
133
- end
134
-
135
- class ContentLocationParser < Treetop::Runtime::CompiledParser
136
- include ContentLocation
137
- end
138
-
139
- end
@@ -1,20 +0,0 @@
1
- module Mail
2
- grammar ContentLocation
3
-
4
- include RFC2822
5
- include RFC2045
6
-
7
- rule primary
8
- CFWS location CFWS
9
- end
10
-
11
- rule location
12
- quoted_string {
13
- def text_value
14
- quoted_content.text_value
15
- end
16
- } / (token / [\x3d])+
17
- end
18
-
19
- end
20
- end
@@ -1,201 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- module Mail
5
- module ContentTransferEncoding
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :primary
10
- end
11
-
12
- include RFC2822
13
-
14
- include RFC2045
15
-
16
- module Primary0
17
- def CFWS1
18
- elements[0]
19
- end
20
-
21
- def encoding
22
- elements[1]
23
- end
24
-
25
- def CFWS2
26
- elements[2]
27
- end
28
-
29
- def CFWS3
30
- elements[4]
31
- end
32
- end
33
-
34
- def _nt_primary
35
- start_index = index
36
- if node_cache[:primary].has_key?(index)
37
- cached = node_cache[:primary][index]
38
- if cached
39
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
40
- @index = cached.interval.end
41
- end
42
- return cached
43
- end
44
-
45
- i0, s0 = index, []
46
- r1 = _nt_CFWS
47
- s0 << r1
48
- if r1
49
- r2 = _nt_encoding
50
- s0 << r2
51
- if r2
52
- r3 = _nt_CFWS
53
- s0 << r3
54
- if r3
55
- if has_terminal?(";", false, index)
56
- r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
57
- @index += 1
58
- else
59
- terminal_parse_failure(";")
60
- r5 = nil
61
- end
62
- if r5
63
- r4 = r5
64
- else
65
- r4 = instantiate_node(SyntaxNode,input, index...index)
66
- end
67
- s0 << r4
68
- if r4
69
- r6 = _nt_CFWS
70
- s0 << r6
71
- end
72
- end
73
- end
74
- end
75
- if s0.last
76
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
77
- r0.extend(Primary0)
78
- else
79
- @index = i0
80
- r0 = nil
81
- end
82
-
83
- node_cache[:primary][start_index] = r0
84
-
85
- r0
86
- end
87
-
88
- def _nt_encoding
89
- start_index = index
90
- if node_cache[:encoding].has_key?(index)
91
- cached = node_cache[:encoding][index]
92
- if cached
93
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
94
- @index = cached.interval.end
95
- end
96
- return cached
97
- end
98
-
99
- i0 = index
100
- if has_terminal?("7bits", false, index)
101
- r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
102
- @index += 5
103
- else
104
- terminal_parse_failure("7bits")
105
- r1 = nil
106
- end
107
- if r1
108
- r0 = r1
109
- else
110
- if has_terminal?("8bits", false, index)
111
- r2 = instantiate_node(SyntaxNode,input, index...(index + 5))
112
- @index += 5
113
- else
114
- terminal_parse_failure("8bits")
115
- r2 = nil
116
- end
117
- if r2
118
- r0 = r2
119
- else
120
- if has_terminal?("7bit", false, index)
121
- r3 = instantiate_node(SyntaxNode,input, index...(index + 4))
122
- @index += 4
123
- else
124
- terminal_parse_failure("7bit")
125
- r3 = nil
126
- end
127
- if r3
128
- r0 = r3
129
- else
130
- if has_terminal?("8bit", false, index)
131
- r4 = instantiate_node(SyntaxNode,input, index...(index + 4))
132
- @index += 4
133
- else
134
- terminal_parse_failure("8bit")
135
- r4 = nil
136
- end
137
- if r4
138
- r0 = r4
139
- else
140
- if has_terminal?("binary", false, index)
141
- r5 = instantiate_node(SyntaxNode,input, index...(index + 6))
142
- @index += 6
143
- else
144
- terminal_parse_failure("binary")
145
- r5 = nil
146
- end
147
- if r5
148
- r0 = r5
149
- else
150
- if has_terminal?("quoted-printable", false, index)
151
- r6 = instantiate_node(SyntaxNode,input, index...(index + 16))
152
- @index += 16
153
- else
154
- terminal_parse_failure("quoted-printable")
155
- r6 = nil
156
- end
157
- if r6
158
- r0 = r6
159
- else
160
- if has_terminal?("base64", false, index)
161
- r7 = instantiate_node(SyntaxNode,input, index...(index + 6))
162
- @index += 6
163
- else
164
- terminal_parse_failure("base64")
165
- r7 = nil
166
- end
167
- if r7
168
- r0 = r7
169
- else
170
- r8 = _nt_ietf_token
171
- if r8
172
- r0 = r8
173
- else
174
- r9 = _nt_custom_x_token
175
- if r9
176
- r0 = r9
177
- else
178
- @index = i0
179
- r0 = nil
180
- end
181
- end
182
- end
183
- end
184
- end
185
- end
186
- end
187
- end
188
- end
189
-
190
- node_cache[:encoding][start_index] = r0
191
-
192
- r0
193
- end
194
-
195
- end
196
-
197
- class ContentTransferEncodingParser < Treetop::Runtime::CompiledParser
198
- include ContentTransferEncoding
199
- end
200
-
201
- end
@@ -1,18 +0,0 @@
1
- module Mail
2
- grammar ContentTransferEncoding
3
-
4
- include RFC2822
5
- include RFC2045
6
-
7
- rule primary
8
- CFWS encoding CFWS ";"? CFWS
9
- end
10
-
11
- rule encoding
12
- "7bits" / "8bits" /
13
- "7bit" / "8bit" / "binary" / "quoted-printable" / "base64" /
14
- ietf_token / custom_x_token
15
- end
16
-
17
- end
18
- end