@@ -227,8 +227,14 @@ module Agents |
||
227 | 227 |
} |
228 | 228 |
when 'from', 'to', 'cc' |
229 | 229 |
value.present? or next true |
230 |
- header = mail.header[key] or next false |
|
231 |
- header.addresses.any? { |address| |
|
230 |
+ begin |
|
231 |
+ # Mail::Field really needs to define respond_to_missing? |
|
232 |
+ # so we could use try(:addresses) here. |
|
233 |
+ addresses = mail.header[key].addresses |
|
234 |
+ rescue NoMethodError |
|
235 |
+ next false |
|
236 |
+ end |
|
237 |
+ addresses.any? { |address| |
|
232 | 238 |
Array(value).any? { |pattern| |
233 | 239 |
glob_match?(pattern, address) |
234 | 240 |
} |
@@ -265,6 +265,24 @@ describe Agents::ImapFolderAgent do |
||
265 | 265 |
} |
266 | 266 |
expect { @checker.check }.to change { Event.count }.by(1) |
267 | 267 |
end |
268 |
+ |
|
269 |
+ describe 'processing mails with a broken From header value' do |
|
270 |
+ before do |
|
271 |
+ # "from" patterns work against mail addresses and not |
|
272 |
+ # against text parts, so these mails should be skipped if a |
|
273 |
+ # "from" condition is given. |
|
274 |
+ @mails.first.header['from'] = '.' |
|
275 |
+ @mails.last.header['from'] = '@' |
|
276 |
+ end |
|
277 |
+ |
|
278 |
+ it 'should ignore them without failing if a "from" condition is given' do |
|
279 |
+ @checker.options['conditions']['from'] = '*' |
|
280 |
+ |
|
281 |
+ expect { |
|
282 |
+ expect { @checker.check }.not_to change { Event.count } |
|
283 |
+ }.not_to raise_exception |
|
284 |
+ end |
|
285 |
+ end |
|
268 | 286 |
end |
269 | 287 |
end |
270 | 288 |
|